Skip to main content
 首页 » 编程设计

python之如何在 SQLAlchemy 中编写生成更新

2025年05月04日9thcjp

我只是在使用 SQLAlchemy 核心,无法获取允许我添加 where 子句的 sql。我希望这个非常通用的更新代码适用于我的所有表格。目的是这是对应于每个表的通用插入/更新函数的一部分。通过这种方式,它允许极其简短的测试代码和简单的 CLI 实用程序,这些实用程序可以简单地传递所有参数和选项,而无需为每个表使用单独的子命令的复杂性。

还需要进行一些调整才能实现,但现在应该可以正常进行更新了。然而,虽然 SQLAlchemy 指的是生成查询,但它不区分选择和更新。我查看了 SQLAlchemy 文档、Essential SQLAlchemy、stackoverflow 和几个源代码存储库,但一无所获。

u      = self._table.update() 
non_key_kw = {} 
for column in self._table.c: 
    if column.name in self._table.primary_key: 
        u.where(self._table.c[column.name] == kw[column.name]) 
    else: 
        col_name = column.name 
        non_key_kw[column.name] = kw[column.name] 
 
print u 
result = u.execute(kw) 

失败了——它似乎无法识别 where 子句:

UPDATE struct SET year=?, month=?, day=?, distance=?, speed=?, slope=?, temp=? 
FAIL 

而且我找不到任何以这种方式构建更新的示例。有什么建议吗?

请您参考如下方法:

“where()”方法是生成性的,因为它返回一个新的 Update() 对象。旧的没有修改:

u = u.where(...)