我正在用收集的数据建立一个数据库。我只想插入数据库中尚未插入的记录,而忽略所有重复记录。
下面是我的代码
conn = sqlite3.connect('Database.db')
df.to_sql("My_cool_data_Temp", conn, if_exists='replace', index=False)
query = "SELECT * FROM My_cool_data_Temp EXCEPT SELECT * FROM My_cool_data;"
new_entries = pd.read_sql(query, conn)
new_entries.to_sql("My_cool_data", conn, if_exists='append', index=False)
conn.execute("DROP TABLE My_cool_data_Temp;")
此代码给出了以下错误:
sqlite3.IntegrityError: UNIQUE constraint failed:
打印 new_entries
我看到由于某种原因,当我得到重复项时,查询似乎不起作用。
你知道我会错过什么吗?我也很高兴有不同的方法来解决我的问题。
非常感谢你!
1条答案
按热度按时间57hvy0tb1#
在看不到样本数据的情况下,问题可能是所有记录上的唯一标识符。如果是,请避免
SELECT * FROM
而是显式定义所有列。否则,任何唯一标识符都将与现有记录不匹配,从而导致first select中的所有记录返回EXCEPT
. 另外,使用插入选择和避免第二次调用:如果列太多(这可能表明数据库设计不够理想),则使用
DataFrame.columns
(删除唯一标识符)。为保留字或具有特殊字符和/或空格的列名添加了反勾号。