Как избежать nameError в sqlalchemy при использовании ORM для базы данных MySQL? [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать nameError в sqlalchemy при использовании ORM для базы данных MySQL? [закрыто]

Сообщение Anonymous »

Как мне избежать наличия имени, когда определения класса для каждой таблицы находятся в другом файле при использовании 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»