Sqlalchemy satır nesne python dict dönüştürmek | Netgez.com
SORU
24 Aralık 2009, PERŞEMBE


Sqlalchemy satır nesne python dict dönüştürmek

Sütun adı ve değer çiftleri üzerinde yineleme için basit bir yolu var mı?

Sqlalchemy benim versiyon 0.5.6

Burada dict kullanarak denedim(satır), ama bir istisnası var , eğer data atar örnek kod: 'Kullanıcı' iterable nesne değildir

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)

Benim sistem çıktıları bu çalışan kod:

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

CEVAP
25 Aralık 2009, Cuma


Bunu kullanıyorum çok iyi bir cevap alamadım:

def row2dict(row):
    d = {}
    for column in row.__table__.columns:
        d[column.name] = str(getattr(row, column.name))

    return d

Eğer yukarıdaki işlev ve burada bir liner (python 2.7) bazı tatlar için çok uygun değil . Edit:

row2dict = lambda r: {c.name: str(getattr(r, c.name)) for c in r.__table__.columns}

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • Joseph Herscher

    Joseph Hersc

    14 Mart 2007
  • TecnoTutosPC

    TecnoTutosPC

    19 Kasım 2012