は、残念ながら今のところ設定する方法はありません(フォーマットコードボタンが機能していない)のようなリストを渡すことができますpandas df.to_sql()メソッドの主キー。さらに、厄介なことを起こさせるために、テーブルが作成された後にsqliteの列に主キーを設定する方法はありません。
しかし、現時点での回避策は、pandas df.to_sql()メソッドを使用してsqliteでテーブルを作成することです。次に、重複したテーブルを作成し、プライマリキーを設定してデータをコピーします。次に古いテーブルを落としてきれいにしてください。
これは、この行に沿ったものです。
import pandas as pd
import sqlite3
df = pd.read_csv("/Users/data/" +filename)
columns = df.columns columns = [i.replace(' ', '_') for i in columns]
#write the pandas dataframe to a sqlite table
df.columns = columns
df.to_sql(name,con,flavor='sqlite',schema=None,if_exists='replace',index=True,index_label=None, chunksize=None, dtype=None)
#connect to the database
conn = sqlite3.connect('database')
c = conn.curser()
c.executescript('''
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE table RENAME TO old_table;
/*create a new table with the same column names and types while
defining a primary key for the desired column*/
CREATE TABLE new_table (col_1 TEXT PRIMARY KEY NOT NULL,
col_2 TEXT);
INSERT INTO new_table SELECT * FROM old_table;
DROP TABLE old_table;
COMMIT TRANSACTION;
PRAGMA foreign_keys=on;''')
#close out the connection
c.close()
conn.close()
これまで私はこの問題に直面していました。ちょうどそれをより便利にするための関数としてすべてをラップしました...
私の限られた経験でsqlite私は、テーブルが作成された後、実行することができない主キーを追加することができないことがわかった更新インサートまたはUPSERTS、およびUPDATE JOINは、多くの不満と慣習的でない回避策を引き起こしました。
最後に、pandas df.to_sql()メソッドには、dtypeキーワード引数があります。これは、列名の型の辞書を取ります。 IE:dtype = {col_1:TEXT}