Django:以编程方式/动态创建数据库表

Posted

技术标签:

【中文标题】Django:以编程方式/动态创建数据库表【英文标题】:Django: create database tables programmatically/dynamically 【发布时间】:2017-03-01 07:37:01 【问题描述】:

我已经在 Django 应用程序上工作了一段时间,并且遇到了动态模型和数据库表生成的需求。我进行了广泛搜索,似乎 Django API 不包含此功能。根据我收集到的信息,South 具有执行此操作的功能(即 south.db.create_table)。但是,根据我从 South 的发行说明中收集到的信息,South 与 Django 1.7 及更高版本不兼容,我的项目是使用 Django 1.9 构建的。

我已经编写了一个脚本,该脚本创建了我想使用以下方法迁移到我的数据库的模式的模型实例:

attrs = '__module__':model_location, 'Meta':Meta
model = type(table_name, (models.Model,), attrs)

附言请注意,这不是上述脚本的全部内容。如果您认为这对我有用,我可以根据要求添加。

有没有人找到将 South 1.0.2 与 Django 1.9 一起使用的解决方法?如果没有,是否有人对我如何在没有 South 的情况下实现此功能有任何想法?我试图考虑替代方法(而不是动态生成表),但这似乎真的会提供最简洁和干净的结果给我的项目范围。

谢谢!

【问题讨论】:

【参考方案1】:

South 与最近的 Django 版本不兼容的原因是,从 Django 1.7 开始,它一直是 rolled into Django,名称为“迁移”。如果您正在寻找类似的功能,则起点是documentation on migrations。特别是您可能对RunSQL 部分感兴趣。

如果您想避开迁移模块,您也可以perform raw SQL queries。

【讨论】:

感谢您的快速回复!我正在调查两者。但是,出于安全原因,我希望避免使用原始 SQL 查询。

以上是关于Django:以编程方式/动态创建数据库表的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式生成基于数据框的创建表语句

C#/WPF:如何以编程方式创建所需数量的文本块以显示表中的数据

如何以编程方式创建“数据库创建脚本”?

核心数据:如何保存以编程方式创建的对象数据模型

以安全的方式从字典数据创建表

Django 1.6 - 以编程方式创建组和权限