Как мне избежать создания круговых импортов, когда определения класса для каждой таблицы находятся в другом файле при использовании SQLalchemy для управления базой данных MySQL?
Я работаю с уже существующей базой, а файлы находятся в одной папке.
# 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
from recipe import Recipe
class Dish(Base):
__tablename__ = "dishes"
ID: Mapped[int] = mapped_column(Integer, primary_key=True)
dish_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==1)
row = session.execute(stmt).first()
ing = row[0]
return ing.ID + 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
from recipe import Recipe
class Ingredient(Base):
__tablename__ = "food_ingredients"
ID: Mapped[int] = mapped_column(Integer, primary_key=True)
ingredient_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
from dish import Dish
from ingredient import Ingredient
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("food_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 main_1.py
from sqlalchemy import create_engine
from sqlalchemy.orm import Session, query
from dish import Dish
from ingredient import Ingredient
from recipe import Recipe
url = "the db url"
engine = create_engine(url, echo = True)
# the dish with ID=1 already exists in the database
with Session(engine) as session:
some_dish = session.query(Dish).get(1)
number = some_dish.some_method()
< /code>
Это трассировка исключения: < /p>
Traceback (most recent call last):
File "C:\Users\other\Desktop\main_1.py", line 11, in
from dish import Dish
File "c:\program files\wing 101 10\bin\dbg\src\debug\tserver\dbgmonitoring.py", line 2205, in __import__
File "c:\program files\wing 101 10\bin\dbg\src\debug\tserver\dbgmonitoring.py", line 636, in ImportHook
File "c:\users\other\desktop\dish.py", line 6, in
from recipe import Recipe
File "c:\program files\wing 101 10\bin\dbg\src\debug\tserver\dbgmonitoring.py", line 2205, in __import__
File "c:\program files\wing 101 10\bin\dbg\src\debug\tserver\dbgmonitoring.py", line 636, in ImportHook
File "c:\users\other\desktop\recipe.py", line 5, in
from dish import Dish
builtins.ImportError: cannot import name 'Dish' from partially initialized module 'dish' (most likely due to a circular import) (C:\Users\other\Desktop\dish.py)
Я старался не импортировать ингредиент , рецепт и блюдо в модулях, однако я получаю там имени. Есть ли способ использовать ORM в отдельных файлах, не делая круговых импортов?
Как мне избежать создания круговых импортов, когда определения класса для каждой таблицы находятся в другом файле при использовании SQLalchemy для управления базой данных MySQL? Я работаю с уже существующей базой, а файлы находятся в одной папке.[code]# 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
from typing import List from sqlalchemy import Column, Integer, ForeignKey, String, DECIMAL from sqlalchemy.orm import Mapped, mapped_column, relationship from base import Base
from sqlalchemy import create_engine from sqlalchemy.orm import Session, query from dish import Dish from ingredient import Ingredient from recipe import Recipe
url = "the db url" engine = create_engine(url, echo = True)
# the dish with ID=1 already exists in the database with Session(engine) as session: some_dish = session.query(Dish).get(1) number = some_dish.some_method() < /code> Это трассировка исключения: < /p> Traceback (most recent call last): File "C:\Users\other\Desktop\main_1.py", line 11, in from dish import Dish File "c:\program files\wing 101 10\bin\dbg\src\debug\tserver\dbgmonitoring.py", line 2205, in __import__ File "c:\program files\wing 101 10\bin\dbg\src\debug\tserver\dbgmonitoring.py", line 636, in ImportHook File "c:\users\other\desktop\dish.py", line 6, in from recipe import Recipe File "c:\program files\wing 101 10\bin\dbg\src\debug\tserver\dbgmonitoring.py", line 2205, in __import__ File "c:\program files\wing 101 10\bin\dbg\src\debug\tserver\dbgmonitoring.py", line 636, in ImportHook File "c:\users\other\desktop\recipe.py", line 5, in from dish import Dish builtins.ImportError: cannot import name 'Dish' from partially initialized module 'dish' (most likely due to a circular import) (C:\Users\other\Desktop\dish.py) [/code] Я старался не импортировать ингредиент , рецепт и блюдо в модулях, однако я получаю там имени. Есть ли способ использовать ORM в отдельных файлах, не делая круговых импортов?
Как мне избежать наличия имени, когда определения класса для каждой таблицы находятся в другом файле при использовании sqlalchemy для управления базой данных MySQL?
Я работаю с уже существующей базой базы.
# in base.py
Как мне избежать наличия имени, когда определения класса для каждой таблицы находятся в другом файле при использовании sqlalchemy для управления базой данных MySQL?
Например:
# in dish.py
class Dish(Base):
__tablename__ = dishes
ID: Mapped =...
Я пытаюсь создать круговое меню с подменю, которое появляется при наведении курсора на элемент главного меню.
До сих пор мне удавалось создать главное круговое меню, но Я пытаюсь реализовать функциональность подменю.
Мой текущий прогресс:...