Ich habe zwei Modelle im selben Modul mit dem Namen models
. Sie sind eine 1-1-Beziehung und wurden pro SQLAlchemy docs konfiguriert.SQLAlchemy Model Circular Import
Vehicle.py
from models.AssetSetting import AssetSetting
class Vehicle(Base):
__tablename__ = 'vehicles'
vehicle_id = Column(Integer, primary_key=True)
...
settings = relationship('AssetSetting', backref=backref('asset_settings'))
AssetSetting.py
from models.Vehicle import Vehicle
class AssetSetting(Base):
__tablename__ = 'asset_settings'
asset_alert_setting_id = Column(Integer, primary_key=True, autoincrement=True)
...
vehicle = relationship('vehicles', foreign_keys=Column(ForeignKey('vehicles.vehicle_id')))
Wenn ich die Zeichenfolge den Aufbau von Beziehungen (dh ForeignKey('vehicles.vehicle_id')
) verwenden erhalte ich die Fehlermeldung:
sqlalchemy.exc.InvalidRequestError:
When initializing mapper Mapper|AssetSetting|asset_settings, expression 'vehicles' failed to locate a name ("name 'vehicles' is not defined").
If this is a class name, consider adding this relationship() to the <class 'models.AssetSetting.AssetSetting'> class after both dependent classes have been defined.
Wenn ich die Klassenzuordnung verwenden, erhalte ich die klassischen Rundimportfehler:
Traceback (most recent call last):
File "tracking_data_runner.py", line 7, in <module>
from models.Tracker import Tracker
File "/.../models/Tracker.py", line 5, in <module>
from models.Vehicle import Vehicle
File "/.../models/Vehicle.py", line 13, in <module>
from models.Tracker import Tracker
ImportError: cannot import name 'Tracker'
Ich glaube, ich könnte dieses Problem beheben, indem Sie die Dateien in dem gleichen Paket setzen, aber würde es vorziehen, sie getrennt zu halten. Gedanken?
Sorry, dass ein copy/paste Fehler war auf dem Teil beim Schreiben der Frage. – mam8cc