相关疑难解决方法(0)

2149
推荐指数
17
解决办法
65万
查看次数

SQLAlchemy过滤查询"列LIKE ANY(数组)"

您好SQLAlchemy专家,这里有一个棘手的问题:

我正在尝试编写一个解析为以下内容的查询:

SELECT * FROM MyTable where my_column LIKE ANY (array['a%', 'b%'])
Run Code Online (Sandbox Code Playgroud)

使用SQLAlchemy:

foo = ['a%', 'b%']

# this works, but is dirty and silly
DBSession().query(MyTable).filter("my_column LIKE ANY (array[" + ", ".join(["'" + f + "'" for f in token.tree_filters]) + "])")

# something like this should work (according to documentation), but doesn't (throws "AttributeError: Neither 'AnnotatedColumn' object nor 'Comparator' object has an attribute 'any'"
DBSession().query(MyTable).filter(MyTable.my_column.any(foo, operator=operators.like)
Run Code Online (Sandbox Code Playgroud)

有解决方案吗

python sqlalchemy any

12
推荐指数
2
解决办法
9788
查看次数

在SQLAlchemy中有条件地过滤

有没有办法filter在SQL Alchemy ORM中有条件地为查询添加参数?

例如,想象一下,我有以下几点:

q = session.query(X)
if a:
 q.filter(X.y == 'a')
elif b:
 q.filter(X.y == 'a', X.z == 'b')
elif c:
 q.filter(X.y == 'a', X.p == 'd') 
Run Code Online (Sandbox Code Playgroud)

有没有办法说只需添加

X.z == 'b' 如果 b

无需(X.y == 'a')在每个过滤器中读取.

好像我能做到

q.filter(X.y == 'a').filter(X.y == 'b')

但这会更改正在执行的查询.

python sqlalchemy

9
推荐指数
1
解决办法
4461
查看次数