我是SQL和SQLAlchemy的新手。我已经搜索了SO和其他地方,并试图理解SQLAlchemy文档,但是没有找到一个满意的解决方案来解决我的问题。在
我有一个表colours
,其中有colour
和farbe
列和以下行:
red rot
green gruen
yellow gelb
blue blau
black schwarz
white weiss
purple violett
grey grau
cyan tuerkis
在python中,我有两个列表:
^{pr2}$两个列表可以有一个或多个元素。在
使用SQLAlchemy,我如何获得在其内容中包含la
和其中一个的行(其中la
和lb
中的元素数量未知)的所有行?因此,应搜索所有列。在
对于上面的示例,结果SQL查询类似于:
SELECT * FROM colours WHERE
(
(colour LIKE "%b%" OR colour LIKE "%w%") AND
(colour LIKE "%l%" OR colour LIKE "%e%")
)
OR
(
(farbe LIKE "%b%" OR farbe LIKE "%w%") AND
(farbe LIKE "%l%" OR farbe LIKE "%e%");
)
结果应为:
yellow gelb
blue blau
black schwarz
white weiss
我目前的解决方案是(更新:5.5.2016):
query = session.query(Colours)
session.query(Colours.colour, Colours.farbe)
def GetFilter(color):
fltr = or_()
for c in color:
t = u'%{0}%'.format(c)
fltr = or_(fltr,
Colours.farbe.like(t),
Colours.colour.like(t)
)
return fltr
if la and lb:
fltra = GetFilter(la)
fltrb = GetFilter(lb)
query = session.query(Colours).filter(fltra).filter(fltrb)
elif la:
fltra = GetFilter(la)
query = session.query(Colours).filter(fltra)
elif lb:
fltrb = GetFilter(lb)
query = session.query(Colours).filter(fltrb)
else:
query = session.query(Colours)
for i in query.all():
print i.id, i.colour, i.farbe
如何才能做得更好?在我的完整脚本中,我有六个列需要搜索。如果没有那些几乎相同的行(Colours.xxxx.like('%'+a+'%')
),怎么能做得更好呢?在
我相信我明白你想做什么。您将需要将该表连接到自身。所以你将加入到行的ID上(不管它们有什么共同点)
相关问题 更多 >
编程相关推荐