Existe-t-il un moyen simple d'itérer les paires nom de colonne et valeur?
Ma version de sqlalchemy est 0.5.6
Voici l'exemple de code où j'ai essayé d'utiliser dict (row), mais il lève une exception, TypeError: l'objet 'User' n'est pas itérable
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)
Exécuter ce code sur mes sorties système:
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
sqlalchemy.util.KeyedTuple
qui est l' objet de la ligne du titre de la question. Cependant, la requête dans la question utilise la classe modèle (mappée), donc le type d' objet de ligne est la classe modèle au lieu desqlalchemy.util.KeyedTuple
.