Я видел много решений, но все еще не могу заставить это работать.
У меня
Код: Выделить всё
class ModuleGroupMember(ModelBase):
__tablename__ = 'module_group_member'
pk = mapped_column(Integer, primary_key=True)
module_pk = mapped_column(Integer, ForeignKey('module.pk'))
module_group_pk = mapped_column(Integer, ForeignKey('module_group.pk'))
class Module(ModelBase):
__tablename__ = 'module'
pk = mapped_column(Integer, primary_key=True)
name = mapped_column(String)
groups = relationship("Module_Group", secondary="module_group_member", back_populates="modules")
class ModuleGroup(ModelBase):
__tablename__ = 'module_group'
pk = mapped_column(Integer, primary_key=True)
description = mapped_column(String)
is_active = mapped_column(Boolean)
name = mapped_column(String)
modules = relationship("Module", secondary="module_group_member", back_populates="groups")
Код: Выделить всё
from .Module import Module
from .Module_Group import ModuleGroup
from .Module_Group_Member import ModuleGroupMember
metadata = ModelBase.metadata
def create_tables():
metadata.create_all(engine)
def drop_tables():
metadata.drop_all(engine)
Когда я запускаю create_all(), таблицы не создаются. Вот что я выполняю. Обратите внимание, что я импортирую все из root.db.models
Код: Выделить всё
from sqlalchemy import create_engine, URL
from sqlalchemy.orm import sessionmaker, DeclarativeBase
from root.db.models import create_tables, Module, drop_tables
url = URL.create(
drivername="postgresql",
username="postgres",
password="postgres",
host="localhost",
database="flask_test"
)
engine = create_engine(url, echo=True)
class ModelBase(DeclarativeBase):
pass
metadata = ModelBase.metadata
drop_tables()
create_tables()
with sessionmaker(bind=engine)() as session:
with session.begin():
session.add(Module(name="Module1"))
session.commit()
Код: Выделить всё
raise NameError( NameError: Module 'Module_Group' has no mapped classes registered under the name '_sa_instance_state'Подробнее здесь: https://stackoverflow.com/questions/786 ... sqlalchemy