111 lines
3.1 KiB
Python
111 lines
3.1 KiB
Python
from peewee import *
|
|
from models import SurveyType, Product, Feature, Platform, PlatformFeature
|
|
import os
|
|
|
|
# Подключение к SQLite
|
|
sqlite_db = SqliteDatabase('survey.db')
|
|
|
|
|
|
class SQLiteBaseModel(Model):
|
|
class Meta:
|
|
database = sqlite_db
|
|
|
|
|
|
class SQLiteSurveyType(SQLiteBaseModel):
|
|
name = CharField(unique=True)
|
|
|
|
class Meta:
|
|
table_name = 'surveytype' # Имя таблицы в SQLite
|
|
|
|
|
|
class SQLiteProduct(SQLiteBaseModel):
|
|
name = CharField()
|
|
survey_type = ForeignKeyField(SQLiteSurveyType, backref='products')
|
|
|
|
class Meta:
|
|
table_name = 'product'
|
|
|
|
|
|
class SQLiteFeature(SQLiteBaseModel):
|
|
name = CharField()
|
|
question_text = TextField()
|
|
product = ForeignKeyField(SQLiteProduct, backref='features')
|
|
|
|
class Meta:
|
|
table_name = 'feature'
|
|
|
|
|
|
class SQLitePlatform(SQLiteBaseModel):
|
|
name = CharField(unique=True)
|
|
survey_type = ForeignKeyField(SQLiteSurveyType, backref='platforms')
|
|
|
|
class Meta:
|
|
table_name = 'platform'
|
|
|
|
|
|
class SQLitePlatformFeature(SQLiteBaseModel):
|
|
platform = ForeignKeyField(SQLitePlatform, backref='features')
|
|
feature = ForeignKeyField(SQLiteFeature, backref='platforms')
|
|
supported = BooleanField(default=True)
|
|
|
|
class Meta:
|
|
table_name = 'platformfeature'
|
|
|
|
|
|
def migrate():
|
|
# Подключаемся к SQLite и создаём соединение
|
|
sqlite_db.connect()
|
|
|
|
# Проверка наличия таблиц (для отладки можно вывести список таблиц)
|
|
cur = sqlite_db.execute_sql("SELECT name FROM sqlite_master WHERE type='table';")
|
|
tables = [row[0] for row in cur.fetchall()]
|
|
print("SQLite tables:", tables)
|
|
|
|
# Миграция SurveyType
|
|
survey_map = {}
|
|
for s in SQLiteSurveyType.select():
|
|
new_survey, _ = SurveyType.get_or_create(name=s.name)
|
|
survey_map[s.id] = new_survey
|
|
|
|
# Миграция Product
|
|
product_map = {}
|
|
for p in SQLiteProduct.select():
|
|
new_product, _ = Product.get_or_create(
|
|
name=p.name,
|
|
survey_type=survey_map[p.survey_type.id]
|
|
)
|
|
product_map[p.id] = new_product
|
|
|
|
# Миграция Feature
|
|
feature_map = {}
|
|
for f in SQLiteFeature.select():
|
|
new_feature, _ = Feature.get_or_create(
|
|
name=f.name,
|
|
question_text=f.question_text,
|
|
product=product_map[f.product.id]
|
|
)
|
|
feature_map[f.id] = new_feature
|
|
|
|
# Миграция Platform
|
|
platform_map = {}
|
|
for pl in SQLitePlatform.select():
|
|
new_platform, _ = Platform.get_or_create(
|
|
name=pl.name,
|
|
survey_type=survey_map[pl.survey_type.id]
|
|
)
|
|
platform_map[pl.id] = new_platform
|
|
|
|
# Миграция PlatformFeature
|
|
for pf in SQLitePlatformFeature.select():
|
|
PlatformFeature.get_or_create(
|
|
platform=platform_map[pf.platform.id],
|
|
feature=feature_map[pf.feature.id],
|
|
defaults={"supported": pf.supported}
|
|
)
|
|
|
|
print("✅ Данные успешно мигрированы из SQLite в PostgreSQL.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
migrate()
|