python ,SQL : How to update multiple rows and columns in a single trip around the database?

标签 python database sqlite

你好 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/

相关文章:

Python 随机样本,有异常

java - Android 上 SQLite 数据库的简单导出和导入

android - 如何在android中使用SQLite数据库从数据库中选择数据?

java - 应用程序运行良好,那么我可以忽略 "CursorWindow: Window is full: requested allocation 12 bytes, free space 4 bytes, window size 2,097,152 bytes"吗?

Python:使用表情符号作为分隔符分割文本

python - 删除 tkinter TreeView 中的标题行

ruby-on-rails - rails : Validate Unique Pairs

ios - 核心数据不直接保存到 sqlite

mysql - 为什么 SQL 查询的结果没有按我期望的顺序返回?

python - Pandas 在第 0 个位置插入空行