我有两个列名列表:setcols
和wherecols
。我想用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。
答案 0 :(得分:2)
问题在于您拨打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})