Python中如何一次查询数据库获取多个指定ID的用户信息?
希望告知文档位置,我看文档,是 some_object = session.query(VersionedFoo).get((5, 10))这样
User.query.get((1,2,3,)),试了一下好像不行
Python中如何一次查询数据库获取多个指定ID的用户信息?
能用 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')}")
核心要点:
- 使用SQL的
IN语句配合参数化查询,避免SQL注入 - 根据ID数量动态生成占位符(
?,?,?) - 通过
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%’))
))
文档里是有的,楼主仔细看看

