我在PostgreSQL中有一个存储过程,可以使用SQLAlchemy进行查询,如下所示:

import sqlalchemy as sa

engine = sa.create_engine(...)

some_argument = 42
some_value = 99
for result in engine.execute(sa.select(['col_name'])
                              .select_from(sa.func.this_is_my_func_name(some_agument))
                              .where('this part does not work')):
     print(result)


我想知道如何在代码中使用类似col_name == some_value的内容。

以下是一些无效的内容:

.where('col_name' == some_value)
.where(sa.column('col_name') == some_value)


我还没有找到其他能完全满足我需求的东西。我可以:

.where(sa.text('col_name = :col_value'))


然后按engine.execute(query, col_value=some_value),但这似乎不是正确的选择。在这一点上,我似乎应该这样做:

sql = sa.text('''
    SELECT
        col_name
    FROM
        this_is_my_func_name(:argument)
    WHERE
        col_name = :value
''')
engine.execute(sql, argument=some_argument, value=some_value)


有什么更好的方法可以完成我的想法,还是我应该只钻全孔sqlalchemy.text

最佳答案

原来我完全错了。

问题实际上是

sa.select(['col_name'])


这不是我们想要的。 Sqlalchemy猜测这是一个列名,但不确定,因此给了我一些警告。它必须是:

sa.select([sa.column('col_name')])


然后它将停止发出警告。但是无论哪种情况

.where(sa.column('col_name') == value)


是正确的方法。

关于python - 我如何在SQLAlchemy(核心)中创建一个文字where列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42912637/

10-09 17:12
查看更多