/
AlexF88
/
FFB
Обзор
Документация
Войти
/
AlexF88
/
FFB
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
database/models.py
123 строки
5 KB
Alex
Start project
16 июл 2026, 16:31
16 июл 2026, 16:31
2ae303e
Код
Авторство
О чём код?
from email.policy import default from enum import unique from os import getenv from sqlalchemy.orm import DeclarativeBase, Mapped, relationship, Session from sqlalchemy.orm import mapped_column from sqlalchemy import String, Integer, BigInteger, DECIMAL, ForeignKey, UniqueConstraint from sqlalchemy import create_engine from dotenv import load_dotenv # доставать секретные данные из .env load_dotenv() BD_USER = getenv('DB_USER') BD_PASSWORD = getenv('DB_PASSWORD') BD_ADDRESS = getenv('DB_ADDRESS') BD_NAME = getenv('DB_NAME') # создать подключение к базе данных # для каждой бд свой драйвер # engine = create_engine(f'postgresql://{BD_USER}:{BD_PASSWORD}@{BD_ADDRESS}/{BD_NAME}', echo=True) engine = create_engine(f'postgresql://{BD_USER}:{BD_PASSWORD}@{BD_ADDRESS}/{BD_NAME}') class Base(DeclarativeBase): pass class Users(Base): '''База пользователей''' __tablename__ = 'users' id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(50)) telegram: Mapped[int] = mapped_column(BigInteger, unique=True) phone: Mapped[str] = mapped_column(String(30), nullable=True) carts: Mapped[int] = relationship('Carts', back_populates='user_cart') def __str__(self): return self.name class Carts(Base): '''База корзин, используеться до кассы''' __tablename__ = 'carts' id: Mapped[int] = mapped_column(primary_key=True) total_price: Mapped[int] = mapped_column(DECIMAL(12, 2), default=0) total_products: Mapped[int] = mapped_column(default=0) user_id: Mapped[int] = mapped_column(ForeignKey('users.id'), unique=True) user_cart: Mapped[Users] = relationship(back_populates='carts') funally_id: Mapped[int] = relationship('Finally_carts', back_populates='user_cart') def __str__(self): return str(self.id) class Finally_carts(Base): '''Окончательная корзина пользователя, возле кассы''' __tablename__ = 'finally_carts' id: Mapped[int] = mapped_column(primary_key=True) product_name: Mapped[str] = mapped_column(String(50)) final_price: Mapped[DECIMAL] = mapped_column(DECIMAL(12, 2)) quantity: Mapped[int] cart_id: Mapped[int] = mapped_column(ForeignKey('carts.id')) user_cart: Mapped[Carts] = relationship(back_populates='funally_id') __table_args__ = (UniqueConstraint('cart_id', 'product_name'),) def __str__(self): return str(self.id) class Categories(Base): '''Категория продуктов''' __tablename__ = 'categories' id: Mapped[int] = mapped_column(primary_key=True) category_name: Mapped[str] = mapped_column(String(20), unique=True) # products: Mapped['Products'] = relationship('product_category') products = relationship('Products', back_populates='product_category') def __str__(self): return self.category_name class Products(Base): '''Продукты''' __tablename__ = 'products' ia: Mapped[int] = mapped_column(primary_key=True) product_name: Mapped[str] = mapped_column(String(20), unique=True) description: Mapped[str] image: Mapped[str] = mapped_column(String(100)) price: Mapped[DECIMAL] = mapped_column(DECIMAL(12, 2)) category_id: Mapped[int] = mapped_column(ForeignKey('categories.id')) product_category: Mapped[Categories] = relationship(back_populates='products') def main(): Base.metadata.create_all(engine) categories = ('Лаваши', 'Донары', 'Хот-Доги', 'Десерты', 'Соусы') products = ( (1, 'Мини Лаваш', 20000, 'Мясо, тесто, помидоры', 'media/lavash/lavash_1.jpg'), (1, 'Мини Говяжий', 22000, 'Мясо, тесто, помидоры', 'media/lavash/lavash_2.jpg'), (1, 'Мини Сыром', 24000, 'Мясо, тесто помидоры', 'media/lavash/lavash_3.jpg'), (2, 'Гамбургер', 20000, 'Мясо, тесто, помидоры', 'media/lavash/donar_1.jpg'), (2, 'Дамбургер', 22000, 'Мясо, тесто, помидоры', 'media/lavash/donar_2.jpg'), (2, 'Чизбургер', 19000, 'Мясо, тесто, помидоры', 'media/lavash/donar_3.jpg'), ) with Session(engine) as session: for category in categories: query = Categories(category_name=category) session.add(query) session.commit() for product in products: query = Products( category_id = product[0], product_name = product[1], price = product[2], description = product[3], image = product[4] ) session.add(query) session.commit() if __name__ == '__main__': main()