python - 使用 SQLAlchemy 构造 UPDATE .. SET .. WHERE .. 语句

标签 python sqlalchemy

我有两个列名称列表:setcolswherecols。我想使用 SQLAlchemy 方法构建一个查询,类似于

UPDATE tablename SET setcols[0]= ?, ... WHERE wherecols[0]= ?, ...

我尝试的是

t = sa.table('tablename', *[sa.column(name) for name in setcols+wherecols])

query = t.update(). \
        where(t.c[cn] == sa.bindparam(cn) for cn in wherecols).\
        values({cn: sa.bindparam(cn) for cn in setcols})

还有这个

query = t.update({cn: sa.bindparam(cn) for cn in setcols}). \
        where(t.c[cn] == sa.bindparam(cn) for cn in wherecols)

但是这些都不起作用,我收到以下错误:

sqlalchemy.exc.ArgumentError: SQL expression object or string expected, got object of type <class 'generator'> instead

我已阅读手册并认为要设置的值可以作为字典提供,但我发现我错了......

有人可以帮忙吗?

我正在使用 sqlalchemy-1.1.13。

最佳答案

问题出在你调用where()的方式上。它需要一个 whereclause,而不是一个生成器对象。使用例如 and_or_ 组合这些生成的谓词:

query = t.update(). \
        where(and_(*[t.c[cn] == sa.bindparam(cn) for cn in wherecols])).\
        values({cn: sa.bindparam(cn) for cn in setcols})

关于python - 使用 SQLAlchemy 构造 UPDATE .. SET .. WHERE .. 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48096902/

相关文章:

python - 将数据帧写入mysql数据库

python - 添加列进行查询,返回 SQLAlchemy 中的映射类

python - 从命令行为 SQLAlchemy/Pyramid 启用 SQL 语句

python - 键盘事件或其他问题

Macintosh 中的 Python 文本转语音

python - 如何确保用户输入的密码与注册到该密码的用户名匹配?

python - 在 python 和 opencv 中从报纸图像中提取文章

python - 插入重复键错误后 SELECT 失败

python - 如何在 Flasksqlachemy 中同时插入父表和子表?

python - 总结直方图中的 Nan