peewee, как запросить указанную таблицу? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть модель peewee, она должна создавать таблицу каждый день, не хочу ли я запрашивать таблицу MotorTable.query() Test20191021, но она всегда запрашивает таблицу сегодня, как я могу запросить указанную таблицу?

DB = SqliteDatabase('test.db')
def motor_db_table(model_cls):
    return 'Test{}'.format(time.strftime('%Y%m%d'))

class MotorTable(Model):
    date = DateTimeField()
    addr = CharField()
    status = CharField()

    class Meta:
        database = DB
        table_function = motor_db_table

1 Ответ

1 голос
/ 25 октября 2019

Есть несколько способов сделать это. Вы можете создать класс модели в замыкании, например,

model_cache = {}

def get_model_for_date(dt):
    tbl_name = 'Test' + dt.strftime('%Y%m%d')

    if tbl_name not in model_cache:
        class MotorTable(Model):
            date = DateTimeField()
            addr = TextField()
            status = CharField()
            class Meta:
                database = DB
                table_name = tbl_name
        if not MotorTable.table_exists():
            MotorTable.create_table()
        model_cache[tbl_name] = MotorTable

    return model_cache[tbl_name]

В качестве альтернативы, вы можете просто явно указывать имя таблицы каждый раз, используя оболочку:

def get_model(dt):
    table_name = 'Test' + dt.strftime('%Y%m%d')
    MotorTable._meta.set_table_name(table_name)
    if not MotorTable.table_exists():
        MotorTable.create_table()
    return MotorTable
...