从sqlalchemy的常量开始

时间:2010-11-05 13:56:52

标签: python sql sqlalchemy startswith

我正在尝试做这样的事情:

Session.query(some_table).filter("/some/path/to/element".startswith(some_table.path)).all()

即,获取某个路径的所有“父”元素。我尝试这样做:

Session.query(some_table).filter(sqlalchemy.sql.expression.literal("/some/path/to/element").startswith(some_table.path)).all()

但是我得到了一些奇怪的例外。我想知道我想要的实际上是否可能。

2 个答案:

答案 0 :(得分:0)

我不明白你要做什么,因为不是那个过滤器只是得到一个布尔过滤器应该得到一个表达式,它将循环它以过滤数据

看一下这个例子(我不认为你想要这个但也许它可以给你一些提示):

Session.query(some_table).filter(some_table.path.like('%/some/path/to/element'))

或这个例子,因为如果我理解你想要获得给定路径的所有父路径:

import os

a = '/some/path/to/element'
parent_path = []
# Get all parent path
while a != '/':
    a = os.path.split(a)[0]
    parent_path.append(a)

Session.query(some_table).filter(some_table.path.in_(parent_path))

希望这会有所帮助

答案 1 :(得分:0)

实际上我给出的第二个例子是有效的,我只是在列名中犯了一个愚蠢的错误。我很抱歉浪费你的时间。