sqlalchemy 查询结果转 dict

使用 SQLAlchemy 查询结果转换为字典(dict)的方法有很多,以下是其中的两种:

  • 调用 Query 对象的 .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 查询结果转换为字典的方法,具体选择哪种方法取决于实际需求和个人喜好。

  •