Sto cercando di ottenere una riga dal DB, modificare quella riga e salvarla di nuovo.
Tutto utilizzando SQLAlchemyAggiornamento riga in SqlAlchemy ORM
Il mio codice
from sqlalchemy import Column, DateTime, Integer, String, Table, MetaData
from sqlalchemy.orm import mapper
from sqlalchemy import create_engine, orm
metadata = MetaData()
product = Table('product', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(1024), nullable=False, unique=True),
)
class Product(object):
def __init__(self, id, name):
self.id = id
self.name = name
mapper(Product, product)
db = create_engine('sqlite:////' + db_path)
sm = orm.sessionmaker(bind=db, autoflush=True, autocommit=True, expire_on_commit=True)
session = orm.scoped_session(sm)
result = session.execute("select * from product where id = :id", {'id': 1}, mapper=Product)
prod = result.fetchone() #there are many products in db so query is ok
prod.name = 'test' #<- here I got AttributeError: 'RowProxy' object has no attribute 'name'
session .add(prod)
session .flush()
Purtroppo non funziona, perché sto cercando di modificare l'oggetto RowProxy. Come posso fare quello che voglio (caricare, modificare e salvare (aggiornare) riga) in modo SqlAlchemy ORM?
nota rapida occhiata: non si aggiungono oggetti a una sessione di modifica. aggiungi quando crei una nuova riga. Normalmente, si modifica semplicemente l'oggetto proxy, quindi si esegue il commit sull'oggetto di sessione. Inoltre, se si desidera veramente utilizzare l'ORM, normalmente non si costruisce una query in SQL e si utilizza il metodo execute. Utilizza il generatore di query. – Keith
ha detto di aver ricevuto un AttributeError durante la modifica dell'oggetto RowProxy. Perché ti aspetti che funzioni? –