postgresql 如何将此postgres SQL查询转换为sqlalchamy核心

siv3szwd  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(101)

我正在使用sqlalchamy的postgres,并且已经通过sqlalchamy中的所有更新文档,但没有找到转换它的方法。

update test as t set
    column_a = c.column_a
from (values
    ('123', 1),
    ('345', 2)  
) as c(column_b, column_a) 
where c.column_b = t.column_b;
91zkwejq

91zkwejq1#

这并不完全正确,因为我没有给表测试添加别名,但它非常接近。也许我以后会想明白的。您需要生成精确的SQL吗?
我认为你需要使用values()

with Session(engine) as session:
    # Use a table object from an ORM class.  You could define a regular table too.
    test_t = Test.__table__
    value_expr = values(
        column('column_b', String),
        column('column_a', Integer),
        name="c").data(
            [('123', 1), ('345', 2)])
    stmt = update(test_t).where(test_t.c.column_b == value_expr.c.column_b).values(column_a=value_expr.c.column_a)
    session.execute(stmt)
    session.commit()

这使得这个SQL使用postgresql:

UPDATE test SET column_a=c.column_a FROM (VALUES (%(param_1)s, %(param_2)s), (%(param_3)s, %(param_4)s)) AS c (column_b, column_a) WHERE test.column_b = c.column_b

相关问题