peewee - динамически изменять метаданные модели БД (например, схемы) - PullRequest
0 голосов
/ 30 сентября 2019

Для вставки одних и тех же данных в один и тот же набор таблиц в разных схемах (данные о мобильном приложении, где идентификатор приложения является первичным ключом, но приложение кросс-платформенное и существует на разных платформах. Схема для каждой платформы, поэтому идентификатор pp не мешаетдля таблиц с fk).

У меня уже есть некоторая инфраструктура для этого, и я не ожидал этого требования. Для меня я вижу, что самый простой способ - это связать существующий класс модели с некоторыми вставками данных db + schema_1 + table_name в первую схему, а затем каким-то образом обновить метаданные classs до db + schema_2 + table_name и снова вызвать insert.

Например,если у меня есть следующий базовый класс с установленным Meta:

class BaseClass_1:
    class Meta_1:
        legacy_table_names = False
        database = db
        schema = 'schema_1'

и другой мета для другой схемы:

class Meta_2:
    legacy_table_names = False
    database = db
    schema = 'schema_2'
    primary_key = CompositeKey('app_id')
    db_table = 'table_name'

и класс модели:

class Table(BaseClass_1):
    date = DateTimeField()
    app_id = TextField()

    class Meta:
        primary_key = CompositeKey('app_id')
        db_table = 'table_name'

тогда, если я сделаю следующее:

Table.insert_many(some_data)
Table._meta = Meta_2
Table._meta = Meta_2()

Я вижу, что есть мета-класс или объект устанавливается вместо объектов "Метаданные", как это было до модификации. К сожалению, я не нашел, как создать экземпляр объекта Metadata. Возможно ли, это направление исследований обнадеживает?

...