python - SqlAlchemy 喜欢过滤器不区分大小写,但它应该区分大小写

标签 python sqlite sqlalchemy case-sensitive case-insensitive

我正在使用 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/

相关文章:

java - 从数据库查询中获取总和而不是在 Android 上添加结果是否不好(性能)?

java - 无法在第 27805 行打开文件

python - 在 WSGI 实例之外访问 Pyramid 数据库

python - Matplotlib:创建两个分别与两个 y 轴一致的子图

java - 使用 SQLiteAssetHelper 写入数据库

python - 如何从 SQLAlchemy 中的现有表中获取列名和类型?

python - 如何使用 SQLAlchemy 在表之间建立关系?

python - Matplotlib - 绘制时间时,它会在秒后添加小数零

python - Pycharm 没有显示结果

python - 在带有 unicode 文本的 python 中使用 jsbeautifier 时出错