SQLAlchemy nicht finden können, ein Klasse name
Vereinfacht, ich habe folgende Klassenstruktur (in einer einzigen Datei):
Base = declarative_base()
class Item(Base):
__tablename__ = 'item'
id = Column(BigInteger, primary_key=True)
# ... skip other attrs ...
class Auction(Base):
__tablename__ = 'auction'
id = Column(BigInteger, primary_key=True)
# ... skipped ...
item_id = Column('item', BigInteger, ForeignKey('item.id'))
item = relationship('Item', backref='auctions')
Bekomme ich die folgende Fehlermeldung von diesem:
sqlalchemy.exc.InvalidRequestError
InvalidRequestError: When initializing mapper Mapper|Auction|auction, expression
'Item' failed to locate a name ("name 'Item' is not defined"). If this is a
class name, consider adding this relationship() to the Auction class after
both dependent classes have been defined.
Ich bin mir nicht sicher, wie Python nicht finden können, das Element der Klasse, als auch bei der übergabe der Klasse, anstatt den Namen als string, bekomme ich den gleichen Fehler. Ich habe gekämpft, Beispiele zu finden, wie einfache Beziehungen mit SQLAlchemy also wenn es etwas offensichtlich falsch hier entschuldige ich mich.
- Diese Antwort könnte auch nützlich sein: stackoverflow.com/questions/7478403/...
- Diese Antwort könnte auch nützlich sein: stackoverflow.com/a/4235691/232794
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese alle stellte sich heraus, dass aufgrund der Art und Weise, die ich eingestellt habe SQLAlchemy bis in die Pyramide. Im wesentlichen müssen Sie dieser Abschnitt auf den Brief und stellen Sie sicher, Sie verwenden die gleichen
declarative_base
Instanz der Basis-Klasse für jedes Modell.War ich auch nicht bindend eine Datenbank-engine, um meine
DBSession
was stört Sie nicht, bis Sie versuchen, Zugriff auf die Metadaten der Tabelle, was passiert, wenn Sie Beziehungen verwenden.Auch, obwohl dies nicht für die OP, für alle, die Landung hier mit bekommen den gleichen Fehler, überprüfen, um sicherzustellen, dass keine Ihrer Tabelle Namen sind Bindestriche in Ihnen.
Beispielsweise eine Tabelle mit dem Namen "Film-genres", die dann verwendet wird als eine sekundäre in eine SQLAlchemy Beziehung, generiert den gleichen Fehler
"name 'movie' is not defined"
, denn es liest nur so weit wie die dash. Schalten Unterstriche (statt Bindestrichen) löst das problem.wenn es ein subpackage-Klasse fügen Sie
Item
undAuction
Klasse__init__.py
im subpackage.