微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 带参数的SQLAlchemy NOT IN子句

在使用Python连接Postgresql数据库时,我们使用的是sqlAlchemy,而不是ORM.我们有一个表,其中一列是一个字符串数组,我们想要检索数组列中没有输入参数的所有行.请注意我们可以检索sqlAlchemy的其他查询的结果,因此问题必须在查询创建中.

我们需要实现的sql如下所示:

select pk from table where 'paramstring' NOT IN(array_column);
-- returns several rows

我们在Python中提出的功能是这样的:

def get_not_matching(param):

    select_statement = select([the_table.c.pk]).where(
        ~data_table.c.array_column.in_([param])
    )

    #... execute and retrieve ResultProxy
    # the result_set comes back empty

任何建议将不胜感激.

解决方法:

您的问题是您正在向后使用in语句.它用于查找具有列表中的字段的行,而不是查找具有包含字符串的列表的行.

换句话说,你所拥有的是:

select pk from table where array_column NOT IN(paramstring);

根据https://groups.google.com/forum/?fromgroups=#!topic/sqlalchemy/QAfTDrNYaFI,sqlAlchemy还不支持查询Postgres数组列中的项目.

他们建议使用原始过滤器来完成你想要的东西:

select([the_table.c.pk]).where(text("array_column @> ARRAY[:element_value]"))).params(element_value='paramstring')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐