<Python, pandas, SQlite> pandasでsqlite3する。
pandas
でsqlite3
を使う。
1.. DB作成。
In [1]: import sqlite3 In [2]: con = sqlite3.connect(':memory:') In [4]: con.execute(''' ...: create table {table} ( ...: {id} integer primary key autoincrement, ...: {name} text not null, ...: {brightness} integer not null ...: ); ...: '''.format(id='id', table='hagemen', name='name', brightness='brightness')) Out[4]: <sqlite3.Cursor at 0xac5bdc0>
2.. pandas
で読み出し。
In [5]: df = pd.io.sql.read_sql_query('select * from {table}'.format(table='hagemen'), con) In [6]: df Out[6]: Empty DataFrame Columns: [id, name, brightness] Index: []
3.. pandas
で書き込み。
In [7]: df2 = pd.DataFrame(data=[(1, 'jiro', 5000), (2, 'goro', 8000)], columns=['id', 'name', 'brightness']) In [8]: df2 Out[8]: id name brightness 0 1 jiro 5000 1 2 goro 8000
In [9]: df2.to_sql('{table}'.format(table='hagemen'), con) --------------------------------------------------------------------------- : : ValueError: Table 'hagemen' already exists.
おっと、テーブルが既にあるとエラー。
4.. テーブル名変更。
In [10]: df2.to_sql('{table}'.format(table='hagemen2'), con) In [11]: df = pd.io.sql.read_sql_query('select * from {table}'.format(table='hagemen2'), con) In [12]: df Out[12]: index id name brightness 0 0 1 jiro 5000 1 1 2 goro 8000
5.. ちと調べたら、
if_exists='replace'
で置き換えしてくれるらしい。
あと、index=False
でインデックスを書き込まないようにしてくれる。
In [14]: df2.to_sql('{table}'.format(table='hagemen2'), con, index=False, if_exists='replace') In [15]: df = pd.io.sql.read_sql_query('select * from {table}'.format(table='hagemen2'), con) In [16]: df Out[16]: id name brightness 0 1 jiro 5000 1 2 goro 8000
いいねー!
pandas
でアクセスした方が何かと便利そう。
マニュアル。
IO Tools (Text, CSV, HDF5, ...) — pandas 0.18.0 documentation
参考。