我正在使用SqlAlchemy作为数据库,但在查询中使用like函数时遇到问题。
我的数据库是SQLite。
我的要求是这样的:
self.session.query(Value.scan).filter(Value.current_value.like("%" + search + "%"), Value.tag == Tag.tag, Tag.visible == True).distinct().all()
Value.current_value列是一个String,你可以在这里看到声明:
class Value(Base):
current_value = Column(String, nullable=False)
搜索变量是来自快速搜索栏的str,并且区分大小写(我从不在其上调用低位或高位)。
我想进行区分大小写的搜索,但结果不区分大小写。
我做了一些研究,喜欢应该区分大小写,并且ilike不区分大小写,所以我不明白为什么它不区分大小写。
我应该为我的列选择另一种必须区分大小写的类型吗?
另一个奇怪的事情是,当在同一列上使用函数contains时,我遇到同样的问题(不区分大小写的结果),但在使用==,!=,<或>等运算符时却没有。 (区分大小写的结果)
semeone是否知道为什么它对运算符区分大小写,而不是与like和contains函数有关?
祝你好运
路茜
答案 0 :(得分:1)
在SQLite中,LIKE默认情况下不区分大小写。
我要做的就是激活case_sensitive_like pragma。
我创建了一个类来激活pragma,如下所示:
class ForeignKeysListener(PoolListener):
"""
Class to activate the pragma case_sensitive_like, that makes the
like and contains functions case sensitive
"""
def connect(self, dbapi_con, con_record):
db_cursor = dbapi_con.execute('pragma case_sensitive_like=ON')
创建引擎时,您只需添加如下监听器:
engine = create_engine(
'sqlite:///' + os.path.join(self.folder, 'database', 'mia2.db'),
listeners=[ForeignKeysListener()])