2012-09-05 2 views
0

sqlalchemy 0.7 및 MySQL 서버 버전 5.1.63을 사용하고 있습니다.Sqlalchemy 대소 문자를 구분하지 않는 쿼리 sql alchemy

내 데이터베이스에 다음과 같은 테이블이 :

CREATE TABLE `g_domains` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
`name` VARCHAR(255) NOT NULL, 
PRIMARY KEY (`id`), 
UNIQUE INDEX `name` (`name`) 
) 
COLLATE='utf8_general_ci' 
ENGINE=InnoDB 

대응하는 모델은 없다 :

class GDomain(Base): 
    __tablename__ = 'g_domains' 
    __table_args__ = { 
     'mysql_engine': 'InnoDB', 
     'mysql_charset': 'utf8', 
     'mysql_collate': 'utf8_general_ci' 
    } 

    id = Column(mysql.BIGINT(unsigned=True), primary_key=True) 
    name = Column(mysql.VARCHAR(255, collation='utf8_general_ci'), 
        nullable=False, unique=True) 

SQL 연금술 반환의 다음 쿼리에 행 :

session.query(GDomain).filter(GDomain.name.in_(domain_set)). 
limit(len(domain_set)).all() 

domain_set은

과 같은 일부 도메인 이름을 포함하는 파이썬 목록입니다.
domain_set = ['www.google.com', 'www.yahoo.com', 'www.AMAZON.com'] 

테이블에 행 (1, www.amazon.com)이 있지만 위 쿼리는 (www.google.com, www.yahoo.com) 만 반환합니다.

나는 SQL 쿼리 실행

SELECT * FROM g_domains 
WHERE name IN ('www.google.com', 'www.yahoo.com', 'www.AMAZON.com') 

당신이 이런 일이 왜 생각을 가지고 있습니까를?

미리 감사드립니다.

답변

0

변수는 무엇입니까? model_domain은 무엇입니까? 일반적으로 다음과 같이 표시됩니다.

GDomain은 두 위치에서 모두 사용됩니다. 또는 당신이 별칭을 사용할 수 있습니다

domains = orm.aliased(GDomain, name='domain') 
session.query(domains).filter(domains.name.in_(domain_set)) 

당신은 항상 디버깅을 시도 할 수 SQLAlchemy의에 의해 생성 된 쿼리를 인쇄 (참조 : SQLAlchemy: print the actual query를)

+0

감사 쿼리가 올바른 응답을 위해. 문제는 sqlalchemy가 데이터베이스 정렬을 존중하지 않는 것 같습니다 (utf8_general_ci) –

관련 문제