首页 文章

Flask-SQLAlchemy一对多关系无法找到名称

提问于
浏览
-1

我有一个Flask应用程序与Flask-SQLAlchemy . 我正在努力 Build 从用户到旅行的一对多关系 . 我看到了,如果我使用SQLAlchemy的declarative_base它可以工作,但是当我使用Flask-SQLAlchemy的db.Model时它不起作用 .

我收到以下错误:

sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper|User|User, expression 'Trip' failed to locate a name ("name 'Trip' is not defined"). If this is a class name, consider adding this relationship() to the <class 'models.user.User'> class after both dependent classes have been defined.

以下是模型:

database.py

from flask import abort 
from flask_sqlalchemy import SQLAlchemy 
from sqlalchemy import exc

db = SQLAlchemy()


class Mixin(db.Model):
    __abstract__ = True
    id = db.Column(db.Integer, primary_key=True)
    date = db.Column(db.DateTime, default=db.func.now())
    date_changed = db.Column(
        db.DateTime, nullable=True, onupdate=db.func.now())
    date_to = db.Column(db.DateTime, nullable=True)

user.py

from database import Mixin, db

class User(Mixin, db.Model):
    __tablename__ = 'User'        
    trips = db.relationship(
        'Trip',
        backref=db.backref('user', lazy='joined'),
        lazy='dynamic'
    )

trip.py

from database import Mixin, db

class Trip(Mixin, db.Model):
    __tablename__ = 'Trip'
    title = db.Column(db.String(100), nullable=False)
    description = db.Column(db.String(250), nullable=False)        
    user_id = db.Column(
        db.Integer,
        db.ForeignKey('User.id'),
        nullable=False
    )

2 回答

  • 0

    将所有模型存储在一个文件中是个好主意,但仅适用于少数模型 . 对于大型我更喜欢将模型存储在语义上独立的文件中 .

    models
    ├── __init__.py
    ├── model1.py
    ├── model2.py
    └── model3.py
    

    __init__.py 需要导入所有模型文件

    import models.model1.py
    import models.model2.py
    import models.model3.py
    
  • 1

    我通过为我的模型使用一个文件来修复它 . 无论如何,我没有足够的模型来需要多个模型文件 .

相关问题