在 SQLAlchemy 中,有几种方法可以指定查询返回的字段名,以下是主要的几种方式:
with_entities()
方法from sqlalchemy import select
from models import User
# 只查询特定字段
query = session.query(User).with_entities(User.id, User.username)
# 等同于
query = select(User.id, User.username)
# 查询特定字段并返回元组
results = session.query(User.id, User.username).all()
# 查询特定字段并返回字典
results = session.query(User.id.label('user_id'), User.username.label('name')).all()
label()
方法重命名字段# 为字段指定别名
query = session.query(
User.id.label('user_id'),
User.username.label('user_name')
)
select()
(SQLAlchemy 1.4+ 推荐)from sqlalchemy import select
stmt = select(User.id, User.username).where(User.active == True)
results = session.execute(stmt).all()
# 返回部分字段和完整实体
results = session.query(User.id, User.username, Address).join(Address).all()
column_property
定义计算字段from sqlalchemy import column_property
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
firstname = Column(String(50))
lastname = Column(String(50))
fullname = column_property(firstname + " " + lastname)
# 查询时可以直接使用
session.query(User.fullname).all()
label()
可以为字段指定别名,这在复杂查询或连接查询中特别有用select()
语法以上方法可以根据具体需求选择使用,在性能敏感的场景下,只查询需要的字段可以显著提高查询效率。