3

sqlalchemy を使用して mysql db に対していくつかのクエリの大文字と小文字を区別する必要があります。sqlalchemy でクエリの大文字と小文字を区別するにはどうすればよいですか。前もって感謝します。

4

1 に答える 1

3

列の照合で大文字と小文字が区別されるように指定する必要があります。
SQLAlchemy の MySQL ダイアレクトのサポートにより、いくつかの列タイプがcollationkwargを受け入れることができます。
以下は、テーブルを作成するときに列の照合を指定する方法の例です。

import sqlalchemy as sa
sa.__version__
# -> '0.7.7'
engine = sa.create_engine('mysql+mysqldb://uname:pword@localhost/your_db', 
                          pool_recycle=3600)
metadata = sa.MetaData()
some_table = sa.Table('some_table', metadata,
    sa.Column('id', sa.Integer, primary_key=True),
    sa.Column('some_column', 
              # specify case-sensitive collation
              sa.dialects.mysql.VARCHAR(100, collation='utf8_bin')), 
)
metadata.create_all(engine)
conn = engine.connect()
conn.execute('''INSERT INTO some_table (some_column) 
                VALUES (%s);''', ('foo',))
conn.execute('''INSERT INTO some_table (some_column) 
                VALUES (%s);''', ('FOO',))
conn.execute('SELECT * FROM some_table;').fetchall()
# -> [(1L, 'foo'), (2L, 'FOO')]
conn.execute('''SELECT * 
                FROM some_table 
                WHERE some_column LIKE %s;''', ('foo%',)).fetchall()
# -> [(1L, 'foo')]
conn.execute('''SELECT * 
                FROM some_table 
                WHERE some_column LIKE %s;''', ('FOO%',)).fetchall()
# -> [(2L, 'FOO')]
于 2012-06-16T22:45:13.633 に答える