1

現在、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
4

1 に答える 1

2

これは少し奇妙なことです。私の経験では、MS SQL Serverはデフォルトで大文字と小文字を区別しませんが、データベースの照合設定を使用して大文字と小文字を区別するようにオプションで設定できます。

COLLATESqlAlchemy(ここを参照)で使用できるので、実行できるはずです(私はこれを自分で試していません):

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

SQL Serverは、LIKEクエリとの正規表現のようなパターンマッチングもサポートしているため、代わりに、パラメーター値でこれを利用できます。'[vV]alue%'

于 2012-12-22T00:45:16.817 に答える