我正在将Python(一个Pandas DataFrame)中的信息写入SQLite数据库中的不同表。我目前正在测试我的DataFrame中的“单元格”与数据库中某个表的名称之间是否匹配,如果是,则将相关行中的信息从DataFrame发送到该表。请参阅下面的代码:
for ii in range(0,row_count):
df_area= pon_transpose.index[ii]
export_date= pon_transpose.iloc[ii,0]
export_morning= pon_transpose.iloc[ii,1]
export_day= pon_transpose.iloc[ii,2]
export_eve= pon_transpose.iloc[ii,3]
export_night= pon_transpose.iloc[ii,4]
cur.execute("SELECT name FROM sqlite_master WHERE type='table'")
available_tables=[item[0] for item in cur.fetchall()] # list of strings of all the table names in the database
list_len= len(available_tables)
for iii in range (0, list_len):
if (re.match('\w*'+df_area, available_tables[iii])):
relevant_table=available_tables[iii]
cur.execute("INSERT INTO " + relevant_table + " VALUES (?,?,?,?,?)", (export_date, export_morning, export_day, export_eve, export_night))
con.commit()
iii=iii+1
ii=ii+1
以上只是我代码的一部分,位于另一个循环中。这会导致Python中的信息被多次读入数据库表,我想避免这种情况。为避免这种情况,我尝试将上面代码中的第4行更改为:
cur.execute("INSERT OR IGNORE INTO " + relevant_table + " VALUES (?,?,?,?,?)", (export_date, export_morning, export_day, export_eve, export_night))
和
cur.execute("INSERT OR REPLACE INTO " + relevant_table + " VALUES (?,?,?,?,?)", (export_date, export_morning, export_day, export_eve, export_night))
然而,到目前为止,这是不成功的。我有一种感觉我应该可以用“INSERT OR REPLACE”来做到这一点,但是现在这个修改没有做任何事情。有没有人有任何想法或可以发现任何错误?我不熟悉SQLite语言,特别是我可能无法找到一个简单的语法修复来解决我的问题(我已经研究过了)。
如果我的代码/其他信息中的任何特定输出有帮助,请告诉我。
提前谢谢。