簡體   English   中英

SQLAlchemy不區分大小寫的查詢SQL Alchemy

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM