python - 为 MS-SQL 创建不区分大小写的 SQLAlchemy 查询

标签 python sql-server sqlalchemy

我目前正在尝试将一个为 MySQL 数据库设计的程序转移到 MS-SQL 数据库上,但遇到了一些麻烦。我发现 MySQL 默认情况下不像 MS-SQL 那样区分大小写。这导致代码出现一些问题,类似于下面列出的问题。

class Employee(Base):
    __tablename__ = "Employees"
    Id = Column(Integer(unsigned=True),
                primary_key=True, nullable=False, unique=True)
    DisplayName = Column(String(64),
                         nullable=False)
    #more columns

def get_employees(sql_session, param, columns=None, partial_match=True):
    if not columns:
        columns = [Employee.Id, Employee.DisplayName]
    clauses = []

    if partial_match:
        clauses.append(Employee.DisplayName.startswith(param))

    whereclause = and_(*clauses)
    stmt = select(columns, whereclause)
    return sql_session.execute(stmt)

我知道 SQL 关键字 COLLATE,但我不确定如何实现它,或者它是否是在这种情况下使用的最佳选择。对于使用 SQLAlchemy 创建不区分大小写的 LIKE 查询,您有何建议?

  • Python 2.7.7
  • SQLAlchemy 0.7.7

最佳答案

这有点奇怪,根据我的经验,MS SQL Server 默认情况下不区分大小写,尽管您可以选择使用数据库的排序规则设置将其设置为区分大小写。

您可以将 COLLATE 与 SqlAlchemy 一起使用(请参阅 here ),因此您应该能够做到(我自己还没有尝试过):

clauses.append(Employee.DisplayName.startswith(collate(param, 'SQL_Latin1_General_CP1_CI_AS')))

SQL Server 还支持与 LIKE 查询进行类似正则表达式的模式匹配,因此您也可以在参数值中使用它,例如'[vV]alue%'

关于python - 为 MS-SQL 创建不区分大小写的 SQLAlchemy 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13998712/

相关文章:

python - 设置 xsd :element in the xsd file 的默认值

python - Tensorflow frozen graph protobuf不预测使用c api

sql - 如果存在排序依据 (SQL Server)

sql - 在 SQL 中添加计算列

sql - 创建存储过程以将新数据插入表中

mysql - SQLAlchemy 必要的表属性

python - PyOdbc 无法连接到 sql server 实例

python - 从 python 创建 pdf

python - 纯 Python 比 Numpy 更快?我可以使这个 numpy 代码更快吗?

python - Sqlalchemy db.create_all() 不创建表