有没有一种简单的方法可以遍历列名和值对?我的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__

牛魔王的故事
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。
添加回答
举报
0/150
提交
取消