Es ist schwer zu verstehen, was genau Sie mit dem von Ihnen bereitgestellten Code-Auszug erreichen möchten. Aber ich werde versuchen zu erraten. Die folgende Antwort basiert auf meiner Vermutung.
Zeile 4 - Sie importieren Dinge (DBSession, SmsDelivery, SmsMessagePart) von Ihren Modulen und dann versuchen Sie, mit diesen Objekten zu arbeiten, wie Sie es in Ihrer Anwendung tun.
Der Fehler zeigt, dass SmsDelivery ein Mapper-Objekt ist - also auf eine Tabelle zeigt. Mapper-Objekte sollten an eine gültige sqlalchemy-Verbindung gebunden sein.
Das sagt mir, dass Sie die Initialisierung von DB-Objekten (Verbindung und Bindung dieser Verbindung zu Mapper-Objekten) übersprungen haben, wie Sie normalerweise in Ihrem Anwendungscode tun.
DBSession sieht aus wie SQLAlchemy-Sitzungsobjekt - es sollte auch Verbindungsbindung haben.
Alembic hat bereits Verbindung bereit und offen - für Änderungen an DB-Schema, die Sie anfordern mit op. * Methoden.
So sollte es möglich sein, diese Verbindung zu bekommen.
Nach Alembic manueller op.get_bind() wird die aktuell Verbindungs binden zurück:
Für vollständige Interaktion mit einer angeschlossenen Datenbank, verwenden Sie die „bind“, erhältlich von Kontext:
from alembic import op
connection = op.get_bind()
Sie können also verwenden Diese Verbindung, um Ihre Abfragen in db auszuführen.
PS. Ich würde annehmen, dass Sie einige Änderungen an Daten in Ihrer Tabelle vornehmen wollten. Sie können versuchen, diese Änderung in einer Aktualisierungsabfrage zu formulieren. Alembic verfügt über eine spezielle Methode, um solche Änderungen auszuführen - Sie müssen also keine Verbindung herstellen.
alembic.operations.Operations.execute
execute(sql, execution_options=None)
Führen Sie die angegebenen SQL den aktuellen Migrationskontext.
In einem SQL-Skriptkontext wird die Anweisung direkt an den Ausgabestream gesendet. Es gibt jedoch kein Rückgabeergebnis, da diese Funktion darauf ausgerichtet ist, ein Änderungsskript zu generieren, das im "Offline" -Modus ausgeführt werden kann.
Parameter: sql - Jeder Ausdruck Rechts SQLAlchemy, einschließlich:
- eine Zeichenfolge ein sqlalchemy.sql.expression.text() konstruieren.
- eine sqlalchemy.sql.expression.insert() Konstrukt.
- a sqlalchemy.sql.expression.update(),
- sqlalchemy.sql.expression.insert() oder
- sqlalchemy.sql.expression.delete() konstruieren. So ziemlich alles das ist "ausführbar" wie in SQL Expression Language Tutorial beschrieben.
Können Sie die Lösung posten, wenn Sie dies gelöst haben? – Devi