将sqlalchemy行对象转换为python dict

有没有一种简单的方法可以遍历列名和值对?


我的sqlalchemy版本是0.5.6


这是我尝试使用dict(row)的示例代码,但是它抛出异常,TypeError:'User'对象不可迭代


import sqlalchemy

from sqlalchemy import *

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker


print "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 = name


Session = 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.6

Traceback (most recent call last):

  File "untitled-1.py", line 37, in <module>

    print dict(u)

TypeError: 'User' object is not iterable


鸿蒙传说
浏览 1155回答 3
3回答

喵喔喔

您可以访问__dict__SQLAlchemy对象的内部,如下所示:for u in session.query(User).all():&nbsp; &nbsp; print u.__dict__

牛魔王的故事

在SQLAlchemy v0.8及更高版本中,使用检查系统。from sqlalchemy import inspectdef object_as_dict(obj):&nbsp; &nbsp; return {c.key: getattr(obj, c.key)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python