Как мне избежать наличия имени, когда определения класса для каждой таблицы находятся в другом файле при использовании sqlalchemy для управления базой данных MySQL?
Я работаю с уже существующей базой базы. < /p>
# in base.py
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
# in dish.py
from typing import List
from sqlalchemy import select, Column, Integer, ForeignKey, String, DECIMAL
from sqlalchemy.orm import Mapped, mapped_column, relationship
from base import Base
class Dish(Base):
__tablename__ = "dishes"
ID: Mapped[int] = mapped_column(Integer, primary_key=True)
name: Mapped[str] = mapped_column(String(255))
composition: Mapped[List["Recipe"]] = relationship(
back_populates="dish",
foreign_keys="Recipe.ID_dish")
def some_method(self):
stmt = select(Ingredient).where(Ingredient.ID==12)
row = session.execute(stmt).first()
ing = row[0]
return ing + self.ID
# in ingredient.py
from typing import List
from sqlalchemy import Column, Integer, ForeignKey, String, DECIMAL
from sqlalchemy.orm import Mapped, mapped_column, relationship
from base import Base
class Ingredient(Base):
__tablename__ = "ingredients"
ID: Mapped[int] = mapped_column(Integer, primary_key=True)
name: Mapped[str] = mapped_column(String(255))
in_dishes: Mapped[List["Recipe"]] = relationship(
back_populates="ingredient",
foreign_keys="Recipe.ID_ingredient")
# in recipe.py (the linking table)
from sqlalchemy import Column, Integer, ForeignKey, DECIMAL
from sqlalchemy.orm import Mapped, mapped_column, relationship
from base import Base
class Recipe(Base):
__tablename__ = "recipe"
ID_dish: Mapped[int] = mapped_column(Integer, ForeignKey("dishes.ID"), primary_key=True)
ID_ingredient: Mapped[int] = mapped_column(Integer, ForeignKey("ingredients.ID"), primary_key=True)
amount: Mapped[float] = mapped_column(DECIMAL(5,2))
dish: Mapped["Dish"] = relationship(
back_populates="composition",
foreign_keys=[ID_dish])
ingredient: Mapped["Ingredient"] = relationship(
back_populates="in_dishes",
foreign_keys=[ID_ingredient])
# in the main file
from sqlalchemy import create_engine
from sqlalchemy.orm import Session, query
from dish import Dish
from ingredient import Ingredient
from recipe import Recipe
url = "mysql+pymysql://user:pwd@localhost:3306/db"
engine = create_engine(url, echo = True)
with Session(engine) as session:
some_dish = session.query(Dish).get(0001)
some_dish.some_method()
< /code>
Моя проблема заключается в том, что это возвращает имя имени, где классы не определены. Я предполагаю, что это происходит потому, что связанные классы не импортируются в модулях.
Как я могу решить эту проблему?
Подробнее здесь: https://stackoverflow.com/questions/797 ... l-database
Как избежать nameError в sqlalchemy при использовании ORM для базы данных MySQL? [закрыто] ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как избежать nameError в sqlalchemy при использовании ORM для базы данных MySQL?
Anonymous » » в форуме Python - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-