【问题标题】:SQLALCHEMY: Perform bulk SELECT statementSQLALCHEMY:执行批量 SELECT 语句
【发布时间】:2019-01-14 14:10:51
【问题描述】:

不幸的是,我试图使用 sqlalchemy 将一堆选择语句发送到单个数据库,但我的方法没有成功。我所有的查询也有条件查看索引列。我过滤条件的不同组合列表。这是我目前的做法

condition1 = [1,2,3,4,5,6,7,8,9]
condition2 = [1,2,3,4,5,6,7,8,9]

queries_collection = []

for condition_value1 in condition1:

    for condition_value2  in condition2:

        condition = and_(
                        DataModel.column1 == int(condition_value1),
                        DataModel.column2 ==  int(condition_value2))

        queries_collection.append(

           self.db.session.query(DataModel).filter(condition)

        )


self.db.session.add_all(queries_collection)
result = self.db.session.execute()

以下是如何使用 add_all() 的示例,在此处找到 https://github.com/sqlalchemy/sqlalchemy/wiki/FilteredQuery

一般来说,我可以先创建所有查询,然后批量执行吗?

我错过了什么?

【问题讨论】:

    标签: python sqlalchemy flask-sqlalchemy


    【解决方案1】:

    只是

    result = self.db.session.query(DataModel).\
        filter(DataModel.column1.in_(condition1),
               DataModel.column2.in_(condition2)).\
        all()
    

    如果您正在寻找条件 1 和 2 的组合(产品)。

    Session.add_all() 用于将 (transient) 模型对象列表添加到会话中。

    【讨论】:

    • 我不是在寻找任何组合,而是从条件 1 和条件 2 中的值中寻找每个组合。
    • 查询将产生您存储的每个组合。 “any”一词表示具有任意组合的单行与谓词匹配。
    • 换句话说,它回答“(我想)在数据库中为条件 1 和条件 2 的所有可能组合查找值。”
    • 太好了,谢谢!那确实解决了我的问题!如果需要,只需一行代码!
    【解决方案2】:

    创建一个查询而不是查询列表

    query = db.session.query(DataModel)
    
    for condition_value1 in condition1:
    
        for condition_value2  in condition2:
    
            condition = and_(
                        DataModel.column1 == int(condition_value1[0]),
                        DataModel.column2 ==  int(condition_value2[0])
    
            )
    
        query = query.filter(condition)
    
    result = query.all()
    

    【讨论】:

    • 谢谢,托比。我使用列表的原因是我想在数据库中为条件 1 和条件 2 的所有可能组合查找值。因此,我需要执行不同的查询,对吧?只是不想执行循环中已经存在的查询。我相应地更新了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多