[英]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.