我只是在使用 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(...)
