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