如何在SQLAlchemy中编写生成式更新

3
我只是使用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

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

1个回答

2
“where()”方法是一种生成式的方法,它返回一个新的“Update()”对象。旧的对象不会被修改:
u = u.where(...)

谢谢 - 那个完美地解决了问题。我想我很高兴这只是我的一个愚蠢错误,而不是好工具中的一个漏洞。 :-) - Buford Sweatley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接