sqlalchemy update or insert
Verfasst: Dienstag 6. November 2012, 14:25
Hi,
ich wollte mal fragen obs nen einfachen weg gibt in sqlalchemy ein update or insert zu realisieren. Ich hab ne DB mit unique primary key und wenn ich nun versuche den selben eintrach per
session.add(xyz)
hinzuzufügen bekomm ich logischerweiße die meldung dass der key nicht unique ist und sqlalchemy macht dicht.
momentan läuft das ganze so, dass beim start sqlalchemy einen query ausführt um evtl vorhandene einträge zu finden, diese werden dann in eine klasse geladen welche das element von dortan weiterverarbeitet und auch das speichern/updaten übernehmen sollte.
ich weiß dass es einfach geht wenn ich die klasse weg lasse und das ganze in etwa so aufbaue:
bei mir siehts aber in etwa so aus:
und rufe das ganze dann so auf:
in funktion_xyz werden dann noch diverse andere werte zugewiesen und generiert... aber leider meckert sqlaclhemy dann beim speichern bzw adden eines bereits vorhandenen elements rum und macht nicht wie gehofft ein update
kann mir da jemand helfen?
ich wollte mal fragen obs nen einfachen weg gibt in sqlalchemy ein update or insert zu realisieren. Ich hab ne DB mit unique primary key und wenn ich nun versuche den selben eintrach per
session.add(xyz)
hinzuzufügen bekomm ich logischerweiße die meldung dass der key nicht unique ist und sqlalchemy macht dicht.
momentan läuft das ganze so, dass beim start sqlalchemy einen query ausführt um evtl vorhandene einträge zu finden, diese werden dann in eine klasse geladen welche das element von dortan weiterverarbeitet und auch das speichern/updaten übernehmen sollte.
ich weiß dass es einfach geht wenn ich die klasse weg lasse und das ganze in etwa so aufbaue:
Code: Alles auswählen
curid = 1234
myitem = session.query(Scrobble).filter(Scrobble.id == curid).first()
myitem.duration = 60
session.add(myitem)
session.commit()
Code: Alles auswählen
class MyItem(object):
def __init__(self, curid):
self.id = theid
self.duration = duration
self.info
def from_database(self):
result = session.query(Scrobble).filter(Scrobble.id == self.curid).first()
if result:
self.duration = result.duration
self.info = result.info
return self
def to_database(self):
insert = Scrobble(
id = self.curid,
duration = self.duration,
info = self.info
)
session.add(insert)
session.commit()
Code: Alles auswählen
for curid in idlist:
m = MyItem(curid)
m.from_database()
m.funktion_xyz()
m.to_database()
in funktion_xyz werden dann noch diverse andere werte zugewiesen und generiert... aber leider meckert sqlaclhemy dann beim speichern bzw adden eines bereits vorhandenen elements rum und macht nicht wie gehofft ein update
kann mir da jemand helfen?