SQLAlchemie: ein besserer Weg zum Update mit deklarativen?

Ich bin eine SQLAlchemie noob.

Angenommen, ich habe eine Benutzertabelle im deklarativen Modus:

  • SQLAlchemie deklarative Syntax mit Autoload (Reflexion) in Pylonen
  • SQLAlchemy benutzerdefinierte Abfrage Spalte
  • Wörterbuch von Tags in deklarative SQLAlchemy?
  • In SQLAlchemy, wie kann ich ein Ereignis definieren, um DDL mit deklarativer Syntax zu schießen?
  • class User(Base): __tablename__ = 'user' id = Column(u'id', Integer(), primary_key=True) name = Column(u'name', String(50)) 

    Wenn ich die Benutzer-ID kenne, ohne dass das Objekt in die Sitzung geladen wurde, aktualisiere ich diesen Benutzer wie folgt:

     ex = update(User.__table__).where(User.id==123).values(name=u"Bob Marley") Session.execute(ex) 

    Ich mag nicht mit User.__table__ , sollte ich aufhören, mich User.__table__ ?

    Gibt es einen besseren Weg, dies zu tun?

    Vielen Dank!

  • Google Appengine Sende lokalen GIF als E-Mail-Anhang
  • Python Hinzufügen zusätzlicher Fläche zum Bild
  • Python Image Tutorial funktioniert, andere Bilder verhalten sich anders (Bilder mit Pylab)
  • PIL image.open () arbeitet für einige Bilder aber nicht andere
  • Spark mit PySpark Bilder lesen
  • Blob-Bilder in Python anzeigen (App Engine)
  • 3 Solutions collect form web for “SQLAlchemie: ein besserer Weg zum Update mit deklarativen?”

    Es gibt auch einige Update-Fähigkeiten auf der ORM-Ebene. Es handelt sich um keine kniffligen Fälle, aber für den trivialen Fall von Einzelreihen-Update (oder Bulk-Update) funktioniert es gut. Es geht sogar über alle bereits geladenen Objekte und wendet das Update auf sie auch an. Sie können es so verwenden:

     session.query(User).filter_by(id=123).update({"name": u"Bob Marley"}) 

    Du arbeitest hier auf Klauselebene , nicht auf Modell / Entity / Objekt Ebene. Klausel ist niedriger als abgebildet. Und ja, es muss etwas getan werden, um eine Begriffe in andere umzuwandeln.

    Sie könnten auch auf Objekt-Ebene bleiben und tun:

     session = Session() u = session.query(User).get(123) u.name = u"Bob Marley" session.commit() 

    Aber es wird deutlich langsamer sein, da es zu der abgebildeten Objektkonstruktion führt. Und ich bin mir nicht sicher, dass es besser lesbar ist.

    Im Beispiel habe ich die natürlichste und "richtige" Lösung. Ich würde mir keine Sorgen um die kleine Magie machen.

    Ähnliche Funktionalität ist über die Methode update() auf dem Tabellenobjekt verfügbar.

     class User(Base): __tablename__ = 'user' id = Column('id', Integer(), primary_key=True) name = Column('name', String(50)) stmt = User.__table__.update().where(User.id==5).values(name='user #5') 

    Zur Verwendung von User.__table__ ist, wie es in SQLAlchemy gemacht ist.

    Python ist die beste Programmiersprache der Welt.