python

SQLite3

swanB 2016. 11. 3. 10:51

DataFrame.to_sql(name, con, flavor='sqlite', schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)



import sqlite3


con = sqlite3.connect("C:\SQLite3\kospi.db")


cursor = con.cursor()


cursor.execute("CREATE TABLE kakao(Date text, Open int, High int, Low int, Closing int, Volume int)")

cursor.execute("INSERT INTO kakao VALUES('16.06.03', 97000,98600,96900,98000,321405)")


con.commit()




cursor.execute("SELECT * FROM kakao")

row = cursor.fetchone()


cursor.execute("SELECT * FROM kakao")

all_row = cursor.fetchall()

all_row[0][0]


con.close()



#-------------------pandas------------------



DataFrame.to_sql(name, con, flavor='sqlite', schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)


name : 테이블명

con : cursor명

flavor = db종류 (sqlite, mysql)

schema = 스키마값 (none)

if_exists : ‘fail’, ‘replace’, ‘append’ 중 하나를 사용할 수 있는데 기본값은 ‘fail’이다. 

‘fail’은 데이터베이스에 테이블이 존재하는 경우 아무 동작도 수행하지 않는다. 

‘replace’는 테이블이 존재하면 기존 테이블을 삭제하고 새로 테이블을 생성한 후 데이터를 삽입한다. 

‘append’는 테이블이 존재하면 데이터만을 추가한다.

index : DataFrame 의 인덱스를 DB컬럼으로 추가할지 여부 (True)

index_label : 인덱스 컬럼의 라벨 (None)

chunksize : 한번에 써지는 row 수, (None : 한번에 모든 라인을 씀)

dtype: 컬럼에 대한 SQL 타입을 딕셔너리로 넘겨줄 수 있다


패킷 사이즈 데이터에 제약이 있을 경우


df.to_sql('test', con, chunksize=1000)




#-----------------------------------------

con = sqlite3.connect("~~~")

df = pd.read_sql("SELECT * FROM kakao", con, index_col=None)


#인덱스 컬럼이 존재하면 직접 설정




df = pd.read_sql("SELECT * FROM kakao", con, index_col="index")




#---------------주가 읽어 DB에 저장---------------------------


import pandas as pd

import pandas_datareader.data as web

import datetime

import sqlite3


start = datetime.datetime(2010, 1, 1)

end = datetime.datetime(2016, 6, 12)

df = web.DataReader("078930.KS", "yahoo", start, end)


con = sqlite3.connect("C:\SQLite3\kospi.db")

df.to_sql('078930', con, if_exists='replace')


readed_df = pd.read_sql("SELECT * FROM '078930'", con, index_col = 'Date')



#-------------- 배열 통 저장


import sqlite3
 
conn = sqlite3.connect("test.db")
cur = conn.cursor()
 
data = (
    ('홍진우', 1, '서울'),
    ('강지수', 2, '부산'),
    ('김청진', 1, '서울'),
)
sql = "insert into customer(name,category,region) values (?, ?, ?)"
cur.executemany(sql, data)
 
conn.commit()
conn.close()