Sqlite3'executemany',其中UPDATE和INSERT使用的python字典键的作用不相同?

2024-09-30 01:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个sqlite查询,它们使用executemany从python字典插入和更新数据集。使用insert查询dictionary.values()作为executemany第二个参数可以很好地工作,但是使用update我没有得到任何更新。有人能解释一下为什么会有不同吗?
插入代码示例:

query = "INSERT OR REPLACE INTO farm_tb(farm_id, farm)\
           VALUES(:frmid, :frm)"
cur.executemany(query, arr.values())
conn.commit()

更新示例:

query = ("UPDATE emp_log_tb SET syncstatus=syncstatus WHERE log_id=log_id", (':syncstatus', ':logid'))
 cur.executemany(query, arr.values())
 conn.commit()

两个数据集看起来相似:
插入数据:

{'0': {'farmid': '4', 'farm': 'farm1'}, '1': {'farmid': '3', 'farm': 'farm6'}}

更新数据:

{'0': {'logid': '1', 'syncstatus': 1}, '1': {'logid': '2', 'syncstatus': 1}, '2': {'logid': '3', 'syncstatus': 1}, '3': {'logid': '4', 'syncstatus': 1}, '4': {'logid': '5', 'syncstatus': 1}}


Tags: 数据logid示例connquerytbcommit
2条回答

"UPDATE emp_log_tb SET syncstatus=syncstatus WHERE log_id=log_id", (':syncstatus', ':logid') 应该是 UPDATE emp_log_tb SET syncstatus=:syncstatus WHERE log_id=:log_id

update语句只是将每一行的syncstatus设置为其当前值,因为log_id = log_id总是true(当然,除非它是NULL)。另外,您将元组分配给query,而不是字符串。不知道executemany()用它做什么

你想要这样的东西吗

cur.executemany("UPDATE emp_log_tb SET syncstatus=:syncstatus WHERE log_id=:log_id", arr.values())

注意UPDATE中的命名参数,就像INSERT中的参数一样

相关问题 更多 >

    热门问题