Ich habe ein Problem im Zusammenhang mit sqlalchemy und postgresql.sqlalchemy, postgresql und Beziehung stecken in "Leerlauf in der Transaktion"
class Profile(Base):
...
roles = relationship('Role', secondary=role_profiles,
backref='profiles', lazy='dynamic')
Beim Laufen (current_user
ist eine Instanz der Klasse Profile
):
roles = current_user.roles.filter().all()
mit sqlalchemy ich idle in transaction
für alle wählt zum Lesen des Profils in postgresql erhalten.
Edit:
Von Echo der Abfrage, die ich sehen, dass alle Auswahl beginnt mit:
BEGIN (implicit)
Ein weiterer edit:
Nach der Zugabe von
pool_size=20, max_overflow=0
zu der create_engine
es scheint wie die idle in transaction
-Statements werden zurückgesetzt, wenn die Anzahl der Leerlauf zu groß werden. Irgendeine Idee dazu und wäre das eine schlechte Lösung für das Problem?
Wie verwalte ich das und wie würde ich gehen, um die BEGIN
für selects loswerden?
hast du 'pool_timeout = 90' zum Beispiel versucht? Ich fand es [hier im Dokument] (http://docs.sqlalchemy.org/en/rel_0_7/core/engines.html?highlight=pool_timeout) –
Ich denke nicht, dass das das Problem wirklich behebt. Ich möchte loswerden von Selects oder automatisch Commit auf Selects loswerden. – Asken
Sie beenden Transaktionen nicht ordnungsgemäß. Sie müssen Ihre Transaktionen entweder "festschreiben" oder "zurücksetzen". Der 'Beginn'-Teil ist implizit (wie Sie angemerkt haben), aber er muss korrekt beendet werden. Außerdem: Warum haben Sie eine leere Filteranweisung? Ist das sinnvoll? Sind Sie in einem Webkontext oder in einem anderen? Schließlich, obwohl sehr unrecommended, könnten Sie 'Autocommit'-Modus verwenden (aber wirklich, nicht). – javex