我在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
?
答案 0 :(得分:1)
原来我完全错了。
实际上问题是
sa.select(['col_name'])
不是我们想要的。 Sqlalchemy猜测这是一个专栏名称,但它不确定,所以它给了我一点警告。它必须是:
sa.select([sa.column('col_name')])
然后它将停止发出警告。但在任何一种情况下,
.where(sa.column('col_name') == value)
是正确的方法。