繁体   English   中英

sqlalchemy在过滤器中使用自定义方法

[英]sqlalchemy using custom methods in filter

我对此sqlalchemy查询有问题:

def bvalue(value):
    if isinstance(value, unicode):
        value = re.sub('[^\w]', "", value).lower()
    return value

basicValue = bvalue(someVariable)

q = self.session.query(sheet.id).\
    filter(bvalue(sheet.column) == basicValue)

bvalue函数起作用。 在将值从任何特殊字符和大写字母中删除后,我正在尝试匹配值。 剥离的变量确实与剥离的db值匹配,但是查询仍未检索任何结果。

我究竟做错了什么? 您不能在过滤器中使用自定义方法吗?

您知道SQLAlchemy将您的查询转换为简单的SQL语句,然后将这些语句发送到已配置的数据库吗?

因此,自然地,您不能简单地添加任意python函数,因为它们将必须转换为SQL,而这不能以通用方式完成。

除了这个一般问题外, bvalue(sheet.column)只会返回sheet.column (因为它不是unicode实例),并且在创建查询之前会对其进行评估。 因此,您的查询实际上等效于:

q = self.session.query(sheet.id).\
    filter(sheet.column == basicValue)

如何将正则表达式转换为SQL取决于您使用的数据库。 在SQLAlchemy中检查例如REGEXP_LIKE以获取一些建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM