SQLAlchemie: ein besserer Weg zum Update mit deklarativen?

Ich bin eine SQLAlchemie noob.

Angenommen, ich habe eine Benutzertabelle im deklarativen Modus:

  • In SQLAlchemy, wie kann ich ein Ereignis definieren, um DDL mit deklarativer Syntax zu schießen?
  • SQLAlchemy benutzerdefinierte Abfrage Spalte
  • Wörterbuch von Tags in deklarative SQLAlchemy?
  • SQLAlchemie deklarative Syntax mit Autoload (Reflexion) in Pylonen
  • 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!

  • Ermittlung der JPG-Qualität in Python (PIL)
  • Bild aus dem Blob GAE verarbeiten
  • Ein Bild in Python (Fehler) laden
  • Richtige Möglichkeit, eine Bilddatei in ein PDF-Dokument hinzuzufügen, das mit Reportlab auf AppEngine Python erstellt wurde
  • Komprimiere GAE Blob Bilder mit Python Base64?
  • Wie bekomme ich ein Bild von 100 Bildern mit PIL?
  • 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.