2014-02-07 51 views

回答

7

擴展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) 
9

Peewee有一個助手,將創建以正確的順序表,但你仍然需要在所有的車型明確地傳遞:

from peewee import * 
db = SqliteDatabase(':memory:') 
db.create_tables([ModelA, ModelB, ModelC]) 
+1

也許這個函數的文檔字符串可能出現在API文檔中? – Cilyan

1

這snipnet將創建的對象的當前模塊中定義的所有表:

import sys 

for cls in sys.modules[__name__].__dict__.values(): 
    try: 
     if BaseModel in cls.__bases__: 
      cls.create_table() 
    except: 
     pass 
0
for cls in globals().values(): 
    if type(cls) == peewee.BaseModel: 
     try: 
      cls.create_table() 
     except peewee.OperationalError as e: 
      print(e) 
-1

Python 3的更新(以及每個像我一樣通過Google來解決此問題的人)。如果您有基於主peewee Model類的所有模型,你可以簡單地使用:

import peewee  
models = peewee.Model.__subclasses__() 

感謝this問題的想法。如果你的模型更加複雜,他們也會更詳細地介紹如何使它以遞歸方式工作。

相關問題