project322/init_db.py

123 lines
5 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Скрипт для создания базы данных и загрузки начальных данных из Excel
Запуск: python init_db.py
"""
import os
import pandas as pd
from app import app, db
from app import Partner, ProductCategory, Product, Order, OrderItem
with app.app_context():
print("=" * 50)
print("ИНИЦИАЛИЗАЦИЯ БАЗЫ ДАННЫХ")
print("=" * 50)
# Создаём папку instance, если её нет
if not os.path.exists('instance'):
os.makedirs('instance')
print("✅ Папка instance создана")
# Создаём таблицы
print("\n1. Создание таблиц...")
db.create_all()
print(" ✅ Таблицы созданы")
# Проверяем, есть ли уже данные
if ProductCategory.query.count() > 0:
print("\n⚠️ Таблицы уже содержат данные!")
response = input("Удалить все данные и загрузить заново? (y/n): ")
if response.lower() != 'y':
print("❌ Операция отменена")
exit()
# Очищаем таблицы
print("\n2. Очистка существующих данных...")
OrderItem.query.delete()
Order.query.delete()
Product.query.delete()
Partner.query.delete()
ProductCategory.query.delete()
db.session.commit()
print(" ✅ Данные очищены")
# Загружаем категории
print("\n3. Загрузка категорий...")
try:
df = pd.read_excel('data/categories.xlsx')
for _, row in df.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)} категорий")
except Exception as e:
print(f" ❌ Ошибка: {e}")
# Загружаем партнёров
print("\n4. Загрузка партнёров...")
try:
df = pd.read_excel('data/partners.xlsx')
for _, row in df.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)),
total_orders_sum=0, # Начальная сумма заказов
actual_address=row.get('actual_address', ''),
legal_address=row.get('legal_address', '')
)
db.session.add(partner)
db.session.commit()
print(f" ✅ Добавлено {len(df)} партнёров")
except Exception as e:
print(f" ❌ Ошибка: {e}")
# Загружаем товары
print("\n5. Загрузка товаров...")
try:
df = pd.read_excel('data/products.xlsx')
# Преобразуем числовые поля
df['alcohol_content'] = pd.to_numeric(df['alcohol_content'], errors='coerce')
df['volume'] = pd.to_numeric(df['volume'], errors='coerce')
for _, row in df.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)} товаров")
except Exception as e:
print(f" ❌ Ошибка: {e}")
# Показываем статистику
print("\n" + "=" * 50)
print("СТАТИСТИКА")
print("=" * 50)
print(f"Категорий: {ProductCategory.query.count()}")
print(f"Партнёров: {Partner.query.count()}")
print(f"Товаров: {Product.query.count()}")
print(f"Заявок: {Order.query.count()}")
print("\n✅ База данных успешно инициализирована!")