Python - Cơ sở dữ liệu quan hệ

Chúng tôi có thể kết nối với cơ sở dữ liệu quan hệ để phân tích dữ liệu bằng cách sử dụng pandasthư viện cũng như một thư viện bổ sung khác để thực hiện kết nối cơ sở dữ liệu. Gói này được đặt tên làsqlalchemy cung cấp đầy đủ chức năng ngôn ngữ SQL được sử dụng trong python.

Cài đặt SQLAlchemy

Quá trình cài đặt diễn ra rất đơn giản bằng Anaconda mà chúng ta đã thảo luận trong chương Môi trường khoa học dữ liệu . Giả sử bạn đã cài đặt Anaconda như được mô tả trong chương này, hãy chạy lệnh sau trong Cửa sổ nhắc nhở Anaconda để cài đặt gói SQLAlchemy.

conda install sqlalchemy

Đọc bảng quan hệ

Chúng tôi sẽ sử dụng Sqlite3 làm cơ sở dữ liệu quan hệ của mình vì nó rất nhẹ và dễ sử dụng. Mặc dù thư viện SQLAlchemy có thể kết nối với nhiều nguồn quan hệ khác nhau bao gồm MySql, Oracle và Postgresql và Mssql. Đầu tiên chúng tôi tạo một công cụ cơ sở dữ liệu và sau đó kết nối với công cụ cơ sở dữ liệu bằng cách sử dụngto_sql chức năng của thư viện SQLAlchemy.

Trong ví dụ dưới đây, chúng tôi tạo bảng quan hệ bằng cách sử dụng to_sqlchức năng từ khung dữ liệu đã được tạo bằng cách đọc tệp csv. Sau đó, chúng tôi sử dụngread_sql_query hàm từ gấu trúc để thực thi và thu thập kết quả từ các truy vấn SQL khác nhau.

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)

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả như sau.

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

Chèn dữ liệu vào bảng quan hệ

Chúng tôi cũng có thể chèn dữ liệu vào bảng quan hệ bằng cách sử dụng hàm sql.execute có sẵn trong gấu trúc. Trong đoạn mã dưới đây, chúng ta có tệp csv trước đó dưới dạng tập dữ liệu đầu vào, lưu trữ nó trong một bảng quan hệ và sau đó chèn một bản ghi khác bằng sql.execute.

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)

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả như sau.

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

Xóa dữ liệu khỏi các bảng quan hệ

Chúng ta cũng có thể xóa dữ liệu vào các bảng quan hệ bằng cách sử dụng hàm sql.execute có sẵn trong gấu trúc. Đoạn mã dưới đây xóa một hàng dựa trên điều kiện đầu vào đã cho.

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)

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả như sau.

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