为了账号安全,请及时绑定邮箱和手机立即绑定

将sqlalchemy行对象转换为python dict

将sqlalchemy行对象转换为python dict

鸿蒙传说 2019-10-14 11:04:05
有没有一种简单的方法可以遍历列名和值对?我的sqlalchemy版本是0.5.6这是我尝试使用dict(row)的示例代码,但是它抛出异常,TypeError:'User'对象不可迭代import sqlalchemyfrom sqlalchemy import *from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmakerprint "sqlalchemy version:",sqlalchemy.__version__ engine = create_engine('sqlite:///:memory:', echo=False)metadata = MetaData()users_table = Table('users', metadata,     Column('id', Integer, primary_key=True),     Column('name', String),)metadata.create_all(engine) class User(declarative_base()):    __tablename__ = 'users'    id = Column(Integer, primary_key=True)    name = Column(String)    def __init__(self, name):        self.name = nameSession = sessionmaker(bind=engine)session = Session()user1 = User("anurag")session.add(user1)session.commit()# uncommenting next line throws exception 'TypeError: 'User' object is not iterable'#print dict(user1)# this one also throws 'TypeError: 'User' object is not iterable'for u in session.query(User).all():    print dict(u)在我的系统输出上运行以下代码:sqlalchemy version: 0.5.6Traceback (most recent call last):  File "untitled-1.py", line 37, in <module>    print dict(u)TypeError: 'User' object is not iterable
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

您可以访问__dict__SQLAlchemy对象的内部,如下所示:


for u in session.query(User).all():

    print u.__dict__


查看完整回答
反对 回复 2019-10-14
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

在SQLAlchemy v0.8及更高版本中,使用检查系统。


from sqlalchemy import inspect


def object_as_dict(obj):

    return {c.key: getattr(obj, c.key)

            for c in inspect(obj).mapper.column_attrs}


user = session.query(User).first()


d = object_as_dict(user)

请注意,这.key是属性名称,可以与列名称不同,例如在以下情况下:


class_ = Column('class', Text)

此方法也适用于column_property。


查看完整回答
反对 回复 2019-10-14
  • 3 回答
  • 0 关注
  • 1154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号