如何使用peewee创建模型中定义的所有表

Ale*_*.Li 9 python orm peewee

我使用peewee定义了很多模型类.ClassName.create_table()可以生成表,但只能生成一个表.如何使用单个语句创建所有表?

col*_*fer 12

Peewee有一个帮助器,它将以正确的顺序创建表,但您仍需要明确传入所有模型:

from peewee import *
db = SqliteDatabase(':memory:')
db.create_tables([ModelA, ModelB, ModelC])
Run Code Online (Sandbox Code Playgroud)


Cil*_*yan 9

假设所有表都分组在一个模块中,扩展了coleifer的答案:

import inspect
import peewee
import tables
models = [
    obj for name, obj in inspect.getmembers(
        tables, lambda obj: type(obj) == type and issubclass(obj, peewee.Model)
    )
]
peewee.create_model_tables(models)
Run Code Online (Sandbox Code Playgroud)


小智 9

Python 3 的更新(以及像我一样通过 Google 遇到这个问题的每个人)。如果您拥有基于主要 peewee Model 类的所有模型,您可以简单地使用:

import peewee    
models = peewee.Model.__subclasses__()
Run Code Online (Sandbox Code Playgroud)

归功于这个问题的想法。如果您的模型更复杂,他们还详细介绍了如何使其递归工作。

  • 放下最好的解决方案! (2认同)