project322/reset_db.py

94 lines
3.8 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from app import app, db
from app import Partner, ProductCategory, Product, Order, OrderItem
with app.app_context():
print("=== ПОЛНЫЙ СБРОС БАЗЫ ДАННЫХ ===\n")
print("1. Удаление таблиц...")
db.drop_all()
print(" ✅ Таблицы удалены")
print("\n2. Создание таблиц...")
db.create_all()
print(" ✅ Таблицы созданы")
from sqlalchemy import inspect
inspector = inspect(db.engine)
tables = inspector.get_table_names()
print(f"\n📋 Список таблиц: {', '.join(tables)}")
print("\n3. Загрузка начальных данных...")
import pandas as pd
# Категории
try:
df_cat = pd.read_excel('data/categories.xlsx')
for _, row in df_cat.iterrows():
cat = ProductCategory(
id=int(row['id']),
name=row['name'],
description=row.get('description', '')
)
db.session.add(cat)
db.session.commit()
print(f" ✅ Добавлено {len(df_cat)} категорий")
except Exception as e:
print(f" ❌ Ошибка загрузки категорий: {e}")
# Партнёры
try:
df_part = pd.read_excel('data/partners.xlsx')
for _, row in df_part.iterrows():
partner = Partner(
id=int(row['id']),
name=row['name'],
short_name=row.get('short_name', ''),
partner_type=row.get('partner_type', ''),
director=row.get('director', ''),
phone=row.get('phone', ''),
discount=float(row.get('discount', 0)),
actual_address=row.get('actual_address', ''),
legal_address=row.get('legal_address', '')
)
db.session.add(partner)
db.session.commit()
print(f" ✅ Добавлено {len(df_part)} партнёров")
except Exception as e:
print(f" ❌ Ошибка загрузки партнёров: {e}")
# Товары
try:
df_prod = pd.read_excel('data/products.xlsx')
df_prod['alcohol_content'] = pd.to_numeric(df_prod['alcohol_content'], errors='coerce')
df_prod['volume'] = pd.to_numeric(df_prod['volume'], errors='coerce')
for _, row in df_prod.iterrows():
product = Product(
id=int(row['id']),
article=row['article'],
name=row['name'],
commercial_name=row.get('commercial_name', ''),
unit=row.get('unit', 'шт'),
base_price=float(row['base_price']),
excise_tax=float(row.get('excise_tax', 0)),
license_fee=float(row.get('license_fee', 0)),
is_alcohol=bool(int(row.get('is_alcohol', 0))),
alcohol_content=float(row['alcohol_content']) if pd.notna(row['alcohol_content']) else None,
volume=float(row['volume']) if pd.notna(row['volume']) else None,
category_id=int(row['category_id'])
)
db.session.add(product)
db.session.commit()
print(f" ✅ Добавлено {len(df_prod)} товаров")
except Exception as e:
print(f" ❌ Ошибка загрузки товаров: {e}")
print("\n=== ПРОВЕРКА ===")
print(f"Категорий: {ProductCategory.query.count()}")
print(f"Партнёров: {Partner.query.count()}")
print(f"Товаров: {Product.query.count()}")
print(f"Заявок: {Order.query.count()}")
print("\n✅ База данных готова!")