Python中如何一次查询数据库获取多个指定ID的用户信息?

希望告知文档位置,我看文档,是 some_object = session.query(VersionedFoo).get((5, 10))这样
User.query.get((1,2,3,)),试了一下好像不行


Python中如何一次查询数据库获取多个指定ID的用户信息?
9 回复

能用 sql 语句的话考虑一下 IN 操作符?


import sqlite3
from typing import List, Dict, Any

def get_users_by_ids(user_ids: List[int]) -> List[Dict[str, Any]]:
    """
    根据用户ID列表批量查询用户信息
    """
    if not user_ids:
        return []
    
    # 创建数据库连接(示例使用SQLite,实际可按需替换为其他数据库)
    conn = sqlite3.connect('users.db')
    conn.row_factory = sqlite3.Row  # 使返回结果为字典格式
    cursor = conn.cursor()
    
    # 构建IN查询的占位符
    placeholders = ','.join('?' * len(user_ids))
    
    # 执行查询
    query = f"SELECT * FROM users WHERE id IN ({placeholders})"
    cursor.execute(query, user_ids)
    
    # 获取结果并转换为字典列表
    results = [dict(row) for row in cursor.fetchall()]
    
    cursor.close()
    conn.close()
    
    return results

# 使用示例
if __name__ == "__main__":
    # 假设要查询ID为1, 3, 5的用户
    user_ids = [1, 3, 5]
    users = get_users_by_ids(user_ids)
    
    for user in users:
        print(f"ID: {user['id']}, Name: {user.get('name', 'N/A')}")

核心要点:

  1. 使用SQL的IN语句配合参数化查询,避免SQL注入
  2. 根据ID数量动态生成占位符(?,?,?
  3. 通过row_factory设置使结果返回字典格式,便于处理

不同数据库的占位符差异:

  • SQLite/MySQL: ?
  • PostgreSQL: %s
  • Oracle: :1, :2, ...

一句话建议:用IN语句加参数化查询最直接高效。

楼上说的对

select xxx from xxx where id in (1,2,3)

用 filter 和 or 试试,没试过 in

some_objects = User.query.filter( User.id.in_(1,2,3) ).all()

我不知道你看的是什么文档,所以不知道到哪里找给你。
另外这些是基本的操作,我也没看文档。如果你要看 Query 的用法,比如 filter 请查看:SQLAlchemy 的 sqlalchemy.orm.query.Query 类的文档说明。
如果要看 User.id 这样的列还可以使用哪些操作。 可以看 sqlalchemy.schema.Column 类的相关文档说明。

范围查找 可以用 IN 关键字

query.filter(User.name.in_([‘ed’, ‘wendy’, ‘jack’]))

# works with query objects too:
query.filter(User.name.in_(
session.query(User.name).filter(User.name.like(’%ed%’))
))

文档里是有的,楼主仔细看看

回到顶部