有没有一种简单的方法来迭代列名和值对?
我的SQLAlchemy版本是0.5.6
下面是我尝试使用dict(row)的示例代码
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)在我的系统输出上运行以下代码:
Traceback (most recent call last):
File "untitled-1.py", line 37, in <module>
print dict(u)
TypeError: 'User' object is not iterable发布于 2009-12-25 13:20:20
我不能得到一个好的答案,所以我使用这个:
def row2dict(row):
d = {}
for column in row.__table__.columns:
d[column.name] = str(getattr(row, column.name))
return d编辑:如果上面的函数太长,不适合某些口味,这里只有一行代码(python 2.7+)
row2dict = lambda r: {c.name: str(getattr(r, c.name)) for c in r.__table__.columns}发布于 2012-04-29 14:31:44
您可以访问SQLAlchemy对象的内部__dict__,如下所示:
for u in session.query(User).all():
print u.__dict__发布于 2016-05-20 23:32:51
在SQLAlchemy v0.8及更高版本中,请使用inspection system。
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。
https://stackoverflow.com/questions/1958219
复制相似问题