Python - İlişkisel Veritabanları

Verileri analiz etmek için ilişkisel veritabanlarına bağlanabiliriz. pandaskütüphane ve veritabanı bağlantısını uygulamak için başka bir ek kitaplık. Bu paketin adısqlalchemy Python'da kullanılmak üzere tam SQL dili işlevselliği sağlayan.

SQLAlchemy'yi yükleme

Kurulum, Veri Bilimi Ortamı bölümünde tartıştığımız Anaconda'yı kullanarak çok basittir . Anaconda'yı bu bölümde anlatıldığı gibi kurduğunuzu varsayarak, SQLAlchemy paketini kurmak için Anaconda Komut Penceresinde aşağıdaki komutu çalıştırın.

conda install sqlalchemy

İlişkisel Tabloları Okuma

Çok hafif ve kullanımı kolay olduğu için Sqlite3'ü ilişkisel veri tabanımız olarak kullanacağız. SQLAlchemy kitaplığı MySql, Oracle ve Postgresql ve Mssql dahil olmak üzere çeşitli ilişkisel kaynaklara bağlanabilir. Önce bir veritabanı motoru oluştururuz ve ardından veritabanı motorunato_sql SQLAlchemy kütüphanesinin işlevi.

Aşağıdaki örnekte ilişkisel tabloyu kullanarak to_sqlcsv dosyası okunarak zaten oluşturulmuş bir veri çerçevesinden işlev. Sonra kullanırızread_sql_query çeşitli SQL sorgularından sonuçları çalıştırmak ve yakalamak için pandalardan işlev.

from sqlalchemy import create_engine
import pandas as pd

data = pd.read_csv('/path/input.csv')

# Create the db engine
engine = create_engine('sqlite:///:memory:')

# Store the dataframe as a table
data.to_sql('data_table', engine)

# Query 1 on the relational table
res1 = pd.read_sql_query('SELECT * FROM data_table', engine)
print('Result 1')
print(res1)
print('')

# Query 2 on the relational table
res2 = pd.read_sql_query('SELECT dept,sum(salary) FROM data_table group by dept', engine)
print('Result 2')
print(res2)

Yukarıdaki kodu çalıştırdığımızda aşağıdaki sonucu verir.

Result 1
   index  id    name  salary  start_date        dept
0      0   1    Rick  623.30  2012-01-01          IT
1      1   2     Dan  515.20  2013-09-23  Operations
2      2   3   Tusar  611.00  2014-11-15          IT
3      3   4    Ryan  729.00  2014-05-11          HR
4      4   5    Gary  843.25  2015-03-27     Finance
5      5   6   Rasmi  578.00  2013-05-21          IT
6      6   7  Pranab  632.80  2013-07-30  Operations
7      7   8    Guru  722.50  2014-06-17     Finance

Result 2
         dept  sum(salary)
0     Finance      1565.75
1          HR       729.00
2          IT      1812.30
3  Operations      1148.00

İlişkisel Tablolara Veri Ekleme

Pandalarda bulunan sql.execute fonksiyonunu kullanarak ilişkisel tablolara da veri ekleyebiliriz. Aşağıdaki kodda csv dosyasını girdi veri seti olarak bir önceki haline getirdik, onu ilişkisel bir tabloda sakladık ve sonra sql.execute kullanarak başka bir kayıt ekledik.

from sqlalchemy import create_engine
from pandas.io import sql

import pandas as pd

data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')

# Store the Data in a relational table
data.to_sql('data_table', engine)

# Insert another row
sql.execute('INSERT INTO data_table VALUES(?,?,?,?,?,?)', engine, params=[('id',9,'Ruby',711.20,'2015-03-27','IT')])

# Read from the relational table
res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)

Yukarıdaki kodu çalıştırdığımızda aşağıdaki sonucu verir.

id        dept    name  salary  start_date
0   1          IT    Rick  623.30  2012-01-01
1   2  Operations     Dan  515.20  2013-09-23
2   3          IT   Tusar  611.00  2014-11-15
3   4          HR    Ryan  729.00  2014-05-11
4   5     Finance    Gary  843.25  2015-03-27
5   6          IT   Rasmi  578.00  2013-05-21
6   7  Operations  Pranab  632.80  2013-07-30
7   8     Finance    Guru  722.50  2014-06-17
8   9          IT    Ruby  711.20  2015-03-27

İlişkisel Tablolardan Veri Silme

Pandalarda bulunan sql.execute fonksiyonunu kullanarak verileri ilişkisel tablolara da silebiliriz. Aşağıdaki kod, verilen giriş koşuluna göre bir satırı siler.

from sqlalchemy import create_engine
from pandas.io import sql

import pandas as pd

data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')
data.to_sql('data_table', engine)

sql.execute('Delete from data_table where name = (?) ', engine,  params=[('Gary')])

res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)

Yukarıdaki kodu çalıştırdığımızda aşağıdaki sonucu verir.

id        dept    name  salary  start_date
0   1          IT    Rick   623.3  2012-01-01
1   2  Operations     Dan   515.2  2013-09-23
2   3          IT   Tusar   611.0  2014-11-15
3   4          HR    Ryan   729.0  2014-05-11
4   6          IT   Rasmi   578.0  2013-05-21
5   7  Operations  Pranab   632.8  2013-07-30
6   8     Finance    Guru   722.5  2014-06-17