如何在SQLAlchemy(核心)中创建一个文字列?

时间:2017-03-20 19:44:49

标签: python sqlalchemy

我在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

1 个答案:

答案 0 :(得分:1)

原来我完全错了

实际上问题是

sa.select(['col_name'])

不是我们想要的。 Sqlalchemy猜测这是一个专栏名称,但它不确定,所以它给了我一点警告。它必须是:

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

然后它将停止发出警告。但在任何一种情况下,

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

是正确的方法。