📅  最后修改于: 2023-12-03 15:23:19.756000             🧑  作者: Mango
在 SQLAlchemy 中,使用查询语句可以从数据库中获取所需数据。在某些情况下,可能只需要获取表中的某些列,而不是所有列的数据。
以下是在 SQLAlchemy 中查询和选择特定列的方法。
使用 Query
对象可以选择要检索的列。可以使用 query()
方法选择所需的列。例如:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:///example.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
Base.metadata.create_all(engine)
# 查询所有用户的名字
users_names = session.query(User.name).all()
# 查询用户ID和名字
users_data = session.query(User.id, User.name).all()
print(users_names)
print(users_data)
输出为:
[('Alice',), ('Bob',), ('Charlie',)]
[(1, 'Alice'), (2, 'Bob'), (3, 'Charlie')]
在第一个示例中,我们只选择了用户表中的名字列,所以只返回了所有用户的名字。
在第二个示例中,我们选择了用户表中的 ID 和名字列,因此返回了每个用户的 ID 和名字。
select
函数可以使用 SQLAlchemy 的 select
函数来选择要从表中检索的列。例如:
from sqlalchemy import select, create_engine, Table, Column, Integer, String
engine = create_engine('sqlite:///example.db', echo=True)
metadata = Base.metadata
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer),
)
# 查询所有用户的名字
stmt = select(users.columns.name)
result = engine.execute(stmt).fetchall()
print(result)
# 查询用户ID和名字
stmt = select([users.columns.id, users.columns.name])
result = engine.execute(stmt).fetchall()
print(result)
输出为:
[('Alice',), ('Bob',), ('Charlie',)]
[(1, 'Alice'), (2, 'Bob'), (3, 'Charlie')]
在第一个示例中,我们选择了用户表中的名字列,因此只返回了所有用户的名字。
在第二个示例中,我们选择了用户表中的 ID 和名字列,因此返回了每个用户的 ID 和名字。
with_entities
方法我们还可以使用 Query
对象的 with_entities
方法选择要从表中检索的列。例如:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:///example.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
Base.metadata.create_all(engine)
# 查询所有用户的名字
users_names = session.query(User).with_entities(User.name).all()
# 查询用户ID和名字
users_data = session.query(User).with_entities(User.id, User.name).all()
print(users_names)
print(users_data)
输出为:
[('Alice',), ('Bob',), ('Charlie',)]
[(1, 'Alice'), (2, 'Bob'), (3, 'Charlie')]
在这里,我们使用 with_entities
方法选择了所需的列。
尽管这可以与 query()
方法的效果相同,但 with_entities
更适合仅选择列的情况,而 query()
更适合限制结果集的多个条件和连接的情况。
以上是在 SQLAlchemy 中查询和选择特定列的方法。