mirror of
https://github.com/FerraSoft/bottohelp.git
synced 2026-08-06 21:55:03 +00:00
73 lines
3.4 KiB
Python
73 lines
3.4 KiB
Python
import sqlite3
|
|
|
|
def migrate_database():
|
|
"""Миграция базы данных для добавления недостающих колонок"""
|
|
try:
|
|
conn = sqlite3.connect('telegram_bot.db')
|
|
cursor = conn.cursor()
|
|
|
|
print("НАЧАЛО МИГРАЦИИ БАЗЫ ДАННЫХ")
|
|
|
|
# Проверяем, есть ли колонка telegram_id в таблице users
|
|
cursor.execute("PRAGMA table_info(users)")
|
|
columns = cursor.fetchall()
|
|
has_telegram_id = any(col[1] == 'telegram_id' for col in columns)
|
|
|
|
if not has_telegram_id:
|
|
print("Добавляем колонку telegram_id в таблицу users...")
|
|
|
|
# Добавляем колонку telegram_id
|
|
cursor.execute("ALTER TABLE users ADD COLUMN telegram_id INTEGER")
|
|
|
|
# Если user_id и telegram_id должны быть разными, здесь можно добавить логику преобразования
|
|
# Пока предполагаем, что они эквивалентны
|
|
cursor.execute("UPDATE users SET telegram_id = user_id WHERE telegram_id IS NULL")
|
|
|
|
print("Колонка telegram_id успешно добавлена")
|
|
else:
|
|
print("Колонка telegram_id уже существует")
|
|
|
|
# Проверяем таблицу scores - она должна ссылаться на правильный user_id
|
|
cursor.execute("PRAGMA table_info(scores)")
|
|
scores_columns = cursor.fetchall()
|
|
print(f"Структура таблицы scores проверена: {len(scores_columns)} колонок")
|
|
|
|
# Проверяем, что все необходимые таблицы существуют
|
|
required_tables = ['users', 'scores', 'achievements', 'user_achievements', 'warnings', 'donations', 'errors']
|
|
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
|
|
existing_tables = [row[0] for row in cursor.fetchall()]
|
|
|
|
print(f"Существующие таблицы: {existing_tables}")
|
|
print(f"Необходимые таблицы: {required_tables}")
|
|
|
|
for table in required_tables:
|
|
if table in existing_tables:
|
|
print(f"Таблица {table}: OK")
|
|
else:
|
|
print(f"Таблица {table}: ОТСУТСТВУЕТ")
|
|
|
|
# Проверяем несколько записей для понимания структуры данных
|
|
try:
|
|
cursor.execute("SELECT user_id, username, first_name FROM users LIMIT 3")
|
|
sample_users = cursor.fetchall()
|
|
if sample_users:
|
|
print(f"\nПримеры пользователей ({len(sample_users)} записей):")
|
|
for i, user in enumerate(sample_users, 1):
|
|
print(f" Пользователь {i}: ID={user[0]}, Username={user[1]}, Name={user[2]}")
|
|
else:
|
|
print("\nТаблица users пуста")
|
|
except Exception as e:
|
|
print(f"Ошибка чтения пользователей: {e}")
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
print("МИГРАЦИЯ ЗАВЕРШЕНА УСПЕШНО")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"Ошибка миграции базы данных: {e}")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
migrate_database() |