'how can I solve this circular dependent imports in order to execute many to one insert

I have the following two models in several files:

routes/camera/model.py

from services.db import db
from dataclasses import dataclass
from routes.project.models import Project

@dataclass
class Camera(db.Model):
    __tablename__ = 'cameras'
    id: int
    name: str
    project_id: int
    url: str

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True, nullable=False)
    url = db.Column(db.String(1000), unique=True, nullable=False)
    project_id = db.Column(db.Integer, db.ForeignKey('projects.id'), nullable=False)
    
db.create_all()

routes/project/model.py

from services.db import db
from dataclasses import dataclass
from routes.camera.models import Camera

@dataclass
class Project(db.Model):
    __tablename__ = 'projects'
    id: int
    name: str

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True, nullable=False)
    cameras = db.relationship(Camera, backref='projects')
    
db.create_all()

The problem is that I need make a insert by project name in camera in order to do this I have the following approach:

def create_camera(name: str, url:str, project_name:str):
    project = Project(name=project_name)
    camera = Camera(name=name, project_id=project, url=url)
    db.session.add(camera)
    db.session.commit()

but I get a circular dependant and I cannot make this insert

So, how can I solve this problem (circular dependent import) or the insert in order to avoid to instantiate the Project class?

Thanks



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source