我可以为您提供翻译。以下是翻译的结果:
我正在使用SQLAlchemy + Alembic + Flask,但我无法映射循环类。
apps/users/models.py:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
email = Column(String)
password = Column(String)
session = relationship("Session", back_populates='user', cascade='all,delete', lazy='dynamic')
notes = relationship('Note2User', back_populates='user', cascade='all,delete', lazy='dynamic')
apps/notes/models.py:
class Note2User(Base):
__tablename__ = 'notes_users_m2m'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id', ondelete='CASCADE'), nullable=False)
user = relationship('User', back_populates='notes')
note_id = Column(Integer, ForeignKey('notes.id', ondelete='CASCADE'), nullable=False)
note = relationship('Note', back_populates='users')
Table Note2User 是为了建立 User <-> Notes 的 m2m 关系而创建的,但在我启动应用程序并执行一些请求后,出现了错误:
InvalidRequestError: 在初始化 Mapper|User|users 映射器时, 表达式 'Note2User' 无法定位名称(“名称 'Note2User' 未定义”)。 如果这是一个类名,请考虑在两个依赖类被定义之后将此 relationship() 添加到该类中。
在 db/init.py 中初始化数据库:(dunder name)
from sqlalchemy import create_engine, MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session
engine = create_engine('postgresql+psycopg2://server:12345@localhost:5432/test')
Base = declarative_base()
meta = MetaData()
meta.reflect(bind=engine)
db_session = Session(bind=engine)