Storm und autoreload

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
sebste
User
Beiträge: 11
Registriert: Mittwoch 22. Juli 2009, 12:50

Hallo Zusammen.
Komme gerade nicht weiter:

Ich verwende storm in einer Applikation als ORM.
Eigentlich läuft alles wunderbar bis auf den Umstand, dass Änderungen die von ausserhalb der Applikation an der Datenbank gemacht werden erst beim nächsten Start meiner Applikation in den Store übernommen werden.

Hier mal die Klasse für eine Tabelle:

Code: Alles auswählen

class MenuLink(object):
    __storm_table__="menu_link"

    id = Int(primary=True)
    menu_name=Unicode()
    name = Unicode()
    url =Unicode()
    target = Unicode()
    link_order=Int()
    published=Bool(default=AutoReload)
Konkret soll MenuLink.published direkt in der Datenbank geänder werden (Momentan mache ich das direkt per psql).
Diese Änderung soll dann direkt in meiner laufenden Applikation übernommen werden.
Also mache ich folgende Abfrage:

Code: Alles auswählen

menu=store.find(MenuLink,  MenuLink.published==True)
Der store holt sich aber nicht die neuen Daten aus der Datenbank und berücksichtigt daher auch die Änderung nicht bis ich eine neue DB-Verbindung und einen neuen Store mache. Das ist aber nicht Zweck der Übung, da ich ja nur einen Store pro Thread haben sollte.

Irgend jemand eine Idee?
Danke, Sebastian
sebste
User
Beiträge: 11
Registriert: Mittwoch 22. Juli 2009, 12:50

Hab nen Workaround gefunden.

Wenn man vor der Abfrage committed, dann wird der store aktualisiert:

Code: Alles auswählen

store.commit() #commit first in order to get db-changes from outside app
menu=store.find(MenuLink,  MenuLink.published==True)
Dadurch kann man sich auch das AutoReload sparen.
Irgendwie fühlt sich das aber wie ein Hack an. Gibt´s ne schönere Variante?

Liebe Grüße, Sebastian
Antworten