我目前正在尝试将为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查询,您会给出什么建议?
答案 0 :(得分:2)
这有点奇怪,根据我的经验,MS SQL Server默认情况下不区分大小写,尽管您可以选择使用数据库的整理设置将其设置为区分大小写。
您可以将COLLATE
与SqlAlchemy一起使用(请参阅here),这样您就可以(我自己没有尝试过):
clauses.append(Employee.DisplayName.startswith(collate(param, 'SQL_Latin1_General_CP1_CI_AS')))
SQL Server还支持与LIKE
查询类似的正则表达式模式匹配,因此您也可以在您的参数值中使用此参数,例如: '[vV]alue%'