Python 使用SqlAlchemy通过主键列表从DB加载多个实例

Python 使用SqlAlchemy通过主键列表从DB加载多个实例,python,sqlalchemy,primary-key,Python,Sqlalchemy,Primary Key,如果我有一个复合主键列表,是否有一种优雅的方法可以使用SqlAlchemy从数据库加载许多实体 可以使用Query.get*主键加载一个对象。 一份清单怎么样?例如: 主键=[ {type:user,id:1}, {type:user,id:2}, {type:user,id:3}, ] 实例=ssn.querymodels.Object。。。? 只需迭代inspectmodels.Object.primary_键并手动构建条件: from sqlalchemy import or_, and_

如果我有一个复合主键列表,是否有一种优雅的方法可以使用SqlAlchemy从数据库加载许多实体

可以使用Query.get*主键加载一个对象。 一份清单怎么样?例如:

主键=[ {type:user,id:1}, {type:user,id:2}, {type:user,id:3}, ] 实例=ssn.querymodels.Object。。。? 只需迭代inspectmodels.Object.primary_键并手动构建条件:

from sqlalchemy import or_, and_, inspect

instances = ssn.query(models.Object).filter(or_(  # or_()ed together
    # and_()ed condition on all PK fields
    and_(*(
        # column == value
        column == pk_dict[column.key]
        for column in inspect(models.Object).primary_key  # list of PK columns
    ))
    for pk_dict in primary_keys
))

@vdmit11使用SQL元组的更优雅的解决方案:

从sqlalchemy导入检查,元组_ 主键的列对象列表 pk_columns=inspectmodels.Object.primary_键 pk_名称=[pk_列中的列的列键] 在…中生成条件:主键元组。。。。 条件=tuple_*pk_columns.in_ 每个对象都由其主键元组表示 pk_名称中pk_字段的tupleentity_dict[pk_字段] 对于主键中的实体\u dict 实例=ssn.querymodels.Object.filtercondition.all 它将生成一个如下所示的查询:

选择* 来自用户 其中uid,登录1'vdmit11',2'kolypto';