-
session.query()
- 主要用于执行ORM查询,它返回的是一个 Query 对象,可以进一步链式调用进行过滤、排序等操作,并最终通过
all() 、first() 、one() 等方法获取结果。 - 查询结果通常会映射到相应的 ORM 类实例上。
示例:
from sqlalchemy.orm import sessionmaker from models import User # 假设User是一个已映射到数据库表的ORM类 Session = sessionmaker(bind=engine) session = Session() # 执行查询并获取所有用户 users_query = session.query(User) users = users_query.all() for user in users: print(user.id, user.name) # 输出:(1, 'John'), (2, 'Jane')...
- 主要用于执行ORM查询,它返回的是一个 Query 对象,可以进一步链式调用进行过滤、排序等操作,并最终通过
-
session.execute()
- 更通用的方法,可用于执行SQL语句(包括原生SQL查询以及ORM表达式)。
- 它既可以执行SELECT查询也可以执行INSERT、UPDATE、DELETE等操作。
- 返回值通常是 ResultProxy 对象,可以通过迭代器或 fetch 方法来获取结果。对于SELECT查询,如果直接遍历ResultProxy对象,每条记录将作为元组返回;若映射到了ORM模型,则为模型实例。
示例:
# 执行原生SQL查询 stmt = text("SELECT id, name FROM users") results = session.execute(stmt) # 结果以元组形式返回 for row in results: print(row.id, row.name) # 或者执行ORM查询表达式 from sqlalchemy.sql import select stmt = select(User.id, User.name) orm_results = session.execute(stmt) # 结果同样可以映射到ORM模型 for user_row in orm_results: print(user_row.id, user_row.name) # 如果映射了User模型,这里将是User实例属性
总结来说,