你好 StackEx 社区。
我正在使用与 Python 接口(interface)的 SQLite 实现关系数据库。我的表由 5 个属性和大约一百万个元组组成。
为了避免大量的数据库查询,我希望执行一个更新多个元组的 2 个属性的查询。这些更新的值取决于元组的 Primary Key
值,因此每个元组都不同。
我正在 Python 2.7
中尝试类似以下内容:
stmt= 'UPDATE Users SET Userid (?,?), Neighbours (?,?) WHERE Username IN (?,?)'
cursor.execute(stmt, [(_id1, _Ngbr1, _name1), (_id2, _Ngbr2, _name2)])
换句话说,我试图通过替换 Neighbours< 来更新具有
和 Primary Keys
_name1
和 _name2
的行Userid
列具有相应的值。两条语句的执行返回如下错误:
OperationalError: near "(": syntax error
我不愿意使用 executemany()
因为我想减少跨数据库的次数。
我现在正在为这个问题苦苦挣扎几个小时,但无法找出错误或网络上的替代方法。请帮忙。
提前致谢。
最佳答案
如果用于查找要更新的行的列已正确建立索引,那么执行多个 UPDATE 语句可能比单个语句更有效,因为在后一种情况下,数据库可能需要扫描所有行。
无论如何,如果你真的想这样做,你可以使用CASE expressions (和 explicitly numbered parameters ,以避免重复):
UPDATE Users
SET Userid = CASE Username
WHEN ?5 THEN ?1
WHEN ?6 THEN ?2
END,
Neighbours = CASE Username
WHEN ?5 THEN ?3
WHEN ?6 THEN ?4
END,
WHERE Username IN (?5, ?6);
关于 python ,SQL : How to update multiple rows and columns in a single trip around the database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34132132/