我有一个需要在运行时生成模型的应用程序
这将根据当前的数据库方案完成
怎么办呢?
如何在python中在运行时创建类?
我应该创建一个json表示并将其保存在数据库中,然后将其反序列化为python对象吗?
答案 0 :(得分:8)
您可以尝试阅读此http://code.djangoproject.com/wiki/DynamicModels
以下是如何创建python模型类的示例:
Person = type('Person', (models.Model,), {
'first_name': models.CharField(max_length=255),
'last_name': models.CharField(max_length=255),
})
您还可以阅读有关python元类的信息:
- What is a metaclass in Python?
- http://www.ibm.com/developerworks/linux/library/l-pymeta.html
- http://gnosis.cx/publish/programming/metaclass_1.html
答案 1 :(得分:2)
您可以基于django的遗留数据库支持,它允许您从数据库中的定义中获取django模型:
见这里:http://docs.djangoproject.com/en/dev/howto/legacy-databases/?from=olddocs
特别是
manage.py inspectdb
允许您在文件中创建类。然后,您应该能够即时导入它们。
那就是说,在我看来,你这样做的风险很大。
答案 2 :(得分:1)
我有一个需要在运行时生成模型的应用程序。
查看inspectdb
管理命令的source code。 Inspectdb
“反映NAME设置所指向的数据库中的数据库表,并将Django模型模块(models.py文件)输出到标准输出。”
如何在python中在运行时创建类?
这样做的一种方法是使用new
模块提供的功能(自2.6以来,该模块已被弃用,而不是types
。)
我应该创建一个json表示并将其保存在数据库中,然后将其反序列化为python对象吗?
这对我来说听起来不是一个好主意。
PS:所有人都说你应该重新考虑在运行时创建类的前提。对于Web应用程序来说,这似乎相当极端。只是我的2c。