有沒有一種簡單的方法可以遍歷列名和值對?我的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
提交
取消
