Ich versuche, eine Zeile von DB zu erhalten, ändern Sie diese Zeile und speichern Sie sie erneut.
Alles von sqlalchemyZeile in SqlAlchemy ORM aktualisieren
Mein Code
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()
Leider funktioniert es nicht verwenden, weil ich RowProxy Objekt zu ändern versuchen. Wie kann ich tun, was ich will (laden, ändern und speichern (aktualisieren) Zeile) in SqlAlchemy ORM Weg?
kurzer Blick Hinweis: Sie fügen Sie keine Objekte auf einer Sitzung zur Modifizierung. Sie fügen hinzu, wenn Sie eine neue Zeile erstellen. Normalerweise ändern Sie einfach das Proxy-Objekt und dann das Commit für das Sitzungsobjekt. Wenn Sie wirklich das ORM verwenden möchten, erstellen Sie normalerweise keine Abfrage in SQL und verwenden die Methode execute. Verwenden Sie den Abfragegenerator. – Keith
Er sagte, er habe einen AttributeError beim Ändern des RowProxy-Objekts erhalten. Warum sollten Sie erwarten, dass das funktioniert? –