使用 SQLAlchemy 查询结果转换为字典(dict)的方法有很多,以下是其中的两种:
.all()
方法获取查询结果列表,然后使用 Python 自带的
dict
函数将每个结果对象转换为字典。这种方法的优点是简单易懂,缺点是可能比较低效,因为每次都要进行一次字典转换。
示例代码如下:
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()
results = session.query(User).all()
dict_results = [result.__dict__ for result in results]
print(dict_results)
使用 sqlalchemy.orm
模块中的 class_mapper
函数获取结果对象的映射关系,然后使用 Python 自带的 vars
函数将结果对象转换为字典。这种方法的优点是较为高效,缺点是可能比较难理解。
示例代码如下:
from sqlalchemy.orm import sessionmaker, class_mapper
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()
results = session.query(User).all()
dict_results = []
for result in results:
mapper = class_mapper(result.__class__)
dict_results.append({column.key: getattr(result, column.key)
for column in mapper.columns})
print(dict_results)
以上是两种将 SQLAlchemy 查询结果转换为字典的方法,具体选择哪种方法取决于实际需求和个人喜好。