[英]Sqlalchemy case insensitive query sql alchemy
我正在使用sqlalchemy 0.7和MySQL服務器版本5.1.63。
我的數據庫中有下表:
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 alchemy中的以下查詢不返回任何行:
session.query(GDomain).filter(GDomain.name.in_(domain_set)).
limit(len(domain_set)).all()
其中domain_set是一個包含一些域名的python列表,例如
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')
您知道為什么會這樣嗎?
提前致謝
什么是model_domain
變量? 通常看起來像這樣:
session.query(GDomain).filter(GDomain.name.in_(domain_set)).
limit(len(domain_set)).all()
請注意,在兩個地方都使用了GDomain
。 另外,您可以使用別名:
domains = orm.aliased(GDomain, name='domain')
session.query(domains).filter(domains.name.in_(domain_set))
您可以隨時嘗試調試,打印sqlalchemy產生的查詢(請參閱: SQLAlchemy:打印實際查詢 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.