我正在使用 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 是一个字符串,您可以在此处查看声明:
class Value(Base):
current_value = Column(String, nullable=False)
搜索变量是来自快速搜索栏的 str,并且区分大小写(我从不调用它的 lower 或 upper)。
我想要进行区分大小写的搜索,但结果不区分大小写。
我做了一些研究,喜欢应该区分大小写,并且喜欢不区分大小写,所以我不明白为什么它不区分大小写。
我应该为我的列选择另一种必须区分大小写的类型吗?
另一个奇怪的事情是,当在同一列上使用函数 contains 时,我遇到了同样的问题(不区分大小写的结果),但在使用 ==、!=、< 或 > 等运算符时却没有(区分大小写的结果)
semeone 知道为什么运算符区分大小写,但 like 和 contains 函数不区分大小写吗?
致以诚挚的问候
露西
最佳答案
在 SQLite 中,LIKE默认情况下不区分大小写。
我要做的就是激活 case_sensitive_like 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()])
关于python - SqlAlchemy 喜欢过滤器不区分大小写,但它应该区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49360525/