К сожалению, нет никакого способа, прямо сейчас, чтобы установить первичный ключ в методе pandas df.to_sql(). Кроме того, просто для того, чтобы больше болеть, нет способа установить первичный ключ в столбце в sqlite после создания таблицы.
Однако работа на данный момент заключается в создании таблицы в sqlite с помощью метода pandas df.to_sql(). Затем вы можете создать дубликатную таблицу и задать свой первичный ключ, а затем скопировать данные. Затем отбросьте свой старый стол, чтобы очистить его.
Это было бы чем-то вроде этого.
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, который может принимать словарь имен столбцов: types. IE: dtype = {col_1: TEXT}