sqlalchemy 将查询结果转换为字典
示例
首先为示例进行设置:
import datetime as dt
from sqlalchemy import Column, Date, Integer, Text, create_engine, inspect
fromsqlalchemy.ormimport sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Session = sessionmaker()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(Text, nullable=False)
birthday = Column(Date)
engine = create_engine('sqlite://')
Base.metadata.create_all(bind=engine)
Session.configure(bind=engine)
session = Session()
session.add(User(name='Alice', birthday=dt.date(1990, 1, 1)))
session.commit()如果您要分别查询列,则该行是KeyedTuple具有_asdict方法的。方法名称以单个下划线开头,以匹配namedtupleAPI(它不是私有的!)。
query = session.query(User.name, User.birthday)
for row in query:
print(row._asdict())使用ORM检索对象时,默认情况下不可用。应该使用SQLAlchemy检查系统。
def object_as_dict(obj):
return {c.key: getattr(obj, c.key)
for c in inspect(obj).mapper.column_attrs}
query = session.query(User)
for user in query:
print(object_as_dict(user))在这里,我们创建了一个函数来进行转换,但是一个选择是向基类添加一个方法。
declarative_base您可以从自己的类中创建它,而不必像上面那样使用:
from sqlalchemy.ext.declarative import as_declarative
@as_declarative()
class Base:
def _asdict(self):
return {c.key: getattr(self, c.key)
for c in inspect(self).mapper.column_attrs}
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短