Ich versuche, eine Funktion zum Aktualisieren von Zeilen in einer Datenbank basierend auf einer Instanz einer Klasse zu erstellen.
Grundsätzlich möchte ich so etwas machen:
def update_table(self, result):
session = self.Session()
session.query(result.__class__).filter_by(id=result.id).update(result)
session.commit()
session.close_all()
user = db.Model.User(
id = 1,
name = "foo"
)
# Store user to db
db.save(user)
updated_user = db.Model.User(
id = 1,
user = "bar"
)
# Update the users name with id=1
update_table(updated_user)
Das Problem besteht darin, dass die Sitzungsabfrage zu einem
TypeError: 'Benutzer'-Objekt ist nicht iterierbar
aber meiner Meinung nach sollte dies mit einem aktualisierten Benutzer mit name="bar" enden.
Gibt es eine Möglichkeit, eine solche Funktion mit dem SQLAlchemy ORM zu erstellen?
Ich bin bei dieser Lösung gelandet:
# Update single entry
def update_table_by_id(self, entry):
# Open connection to database
session = self.Session()
# Fetch entry from database
db_result = session.query(entry.__class__).filter_by(id=entry.id)
# Convert Models to dicts
entry_dict = entry.as_dict()
db_result_dict = db_result.first().as_dict()
# Update database result with passed in entry. Skip of None
for value in entry_dict:
if entry_dict[value] is not None:
db_result_dict[value] = entry_dict[value]
# Update db and close connections
db_result.update(db_result_dict)
session.commit()
session.close_all()
Es erlaubt mir, beliebige Modelle einzusenden, und sie werden alle gleich behandelt.
Anregungen und Verbesserungen sind willkommen!
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen