2012-06-16 2 views
3

Мне нужно сделать некоторые запросы к регистру, чувствительным к mysql db с sqlalchemy , как я могу сделать запрос чувствительным к регистру с sqlalchemy. благодарит заранее.case-query с sqlalchemy

+0

https://groups.google.com/forum/?fromgroups#!topic/sqlalchemy/OyUwclkPzxE –

ответ

3

Вам нужно будет указать, что сортировка столбцов (столбцов) будет чувствительна к регистру.
Поддержка SQLAlchemy диалекта MySQL allows several column-types to accept a collation kwarg.
Ниже приведен пример того, как указать сортировку столбца при создании таблицы.

import sqlalchemy as sa 
sa.__version__ 
# -> '0.7.7' 
engine = sa.create_engine('mysql+mysqldb://uname:[email protected]/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')] 
Смежные вопросы