避免将相同数据的多个条目存入数据库表(Python)

时间:2015-08-24 07:07:19

标签: python database sqlite sql-insert

我正在将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语言,特别是我可能无法找到一个简单的语法修复来解决我的问题(我已经研究过了)。

如果我的代码/其他信息中的任何特定输出有帮助,请告诉我。

提前谢谢。

0 个答案:

没有答案