2012-12-21 81 views
1

我目前正試圖將一個爲MySQL數據庫設計的程序轉移到MS-SQL數據庫上,並且遇到了一些麻煩。我發現默認情況下,MySQL沒有區分大小寫,因爲MS-SQL具有區分大小寫。這導致了與下面列出的代碼類似的一些問題。爲MS-SQL創建不區分大小寫的SQLAlchemy查詢

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

回答

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%'

+0

感謝您的幫助,它完美地解決了MS-SQL的問題,但它確實造成了一個小問題。由於「未知整理」,添加整理功能會破壞與MySQL的兼容性。你有任何解決這兩個問題的建議嗎? – JBolton

+1

恐怕整理字符串是特定於RDBMS的,所以您需要在MySQL中使用不同的內容 - 請參閱文檔[here](https://dev.mysql.com/doc/refman/5.5/en/charset- charsets.html) –