Python-관계형 데이터베이스
데이터 분석을 위해 관계형 데이터베이스에 연결할 수 있습니다. pandas라이브러리 및 데이터베이스 연결을 구현하기위한 또 다른 추가 라이브러리. 이 패키지의 이름은sqlalchemy 파이썬에서 사용되는 완전한 SQL 언어 기능을 제공합니다.
SQLAlchemy 설치
설치는 데이터 과학 환경 장에서 논의한 Anaconda를 사용하여 매우 간단합니다 . 이 장에 설명 된대로 Anaconda를 설치했다고 가정하고 Anaconda 프롬프트 창에서 다음 명령을 실행하여 SQLAlchemy 패키지를 설치합니다.
conda install sqlalchemy
관계형 테이블 읽기
매우 가볍고 사용하기 쉽기 때문에 Sqlite3를 관계형 데이터베이스로 사용할 것입니다. SQLAlchemy 라이브러리는 MySql, Oracle, Postgresql 및 Mssql을 포함한 다양한 관계형 소스에 연결할 수 있습니다. 먼저 데이터베이스 엔진을 만든 다음 다음을 사용하여 데이터베이스 엔진에 연결합니다.to_sql SQLAlchemy 라이브러리의 기능.
아래 예에서는 다음을 사용하여 관계형 테이블을 만듭니다. to_sqlcsv 파일을 읽어서 이미 생성 된 데이터 프레임의 함수입니다. 그런 다음 우리는read_sql_query pandas의 함수를 사용하여 다양한 SQL 쿼리의 결과를 실행하고 캡처합니다.
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)
위 코드를 실행하면 다음과 같은 결과가 나옵니다.
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
관계형 테이블에 데이터 삽입
pandas에서 사용할 수있는 sql.execute 함수를 사용하여 관계형 테이블에 데이터를 삽입 할 수도 있습니다. 아래 코드에서 이전 csv 파일을 입력 데이터 세트로 사용하고 관계형 테이블에 저장 한 다음 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)
위 코드를 실행하면 다음과 같은 결과가 나옵니다.
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
관계형 테이블에서 데이터 삭제
pandas에서 사용할 수있는 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:')
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)
위 코드를 실행하면 다음과 같은 결과가 나옵니다.
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