Files
bottohelp/migrate_db.py
T

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()