Django:如何使“python manage.py syncdb”不仅创建一个数据库,而且还填充我需要的数据?

时间:2014-11-10 17:42:40

标签: python django django-models

当我运行" python manage.py syncdb"我想要不是空的DB,而是我想要的数据。如果在Django中有一个钩子来运行一些foo.save()行吗?

3 个答案:

答案 0 :(得分:1)

来自Django docs about fixtures

  

使用灯具提供初始数据

     

fixture是Django知道如何导入数据库的数据集合。如果您已经获得了一些数据,那么创建夹具的最直接方法是使用manage.py dumpdata命令。或者,你可以手工编写灯具; fixtures可以写成JSON,XML或YAML(安装了PyYAML)文档。序列化文档包含有关每种支持的序列化格式的更多详细信息。

在版本1.7之前,Django有一种自动加载灯具的机制:

  

如果您创建名为initial_data。[xml / yaml / json]的夹具,则每次运行迁移时都会加载该夹具。这非常方便,但要小心:请记住,每次运行迁移时都会刷新数据。所以不要将initial_data用于您想要编辑的数据。

如果您使用的是Django> = 1.7,则必须发出loaddata manage命令或创建迁移:

  

如果应用程序使用迁移,则不会自动加载灯具。由于Django 2.0中的应用程序将需要迁移,因此不推荐使用此行为。如果您要加载应用的初始数据,请考虑在数据migration中执行此操作。

用于阻塞大输入的JSON序列化程序(试图将所有内容加载到内存或类似内容中); XML序列化器用于更好地处理大型灯具。

答案 1 :(得分:0)

假设您使用的是Django 1.7,您可以编写data migration来插入所需的任何数据。

答案 2 :(得分:0)

whole django docs page about it

简而言之,您有三种选择:

  • 提供一组描述模型的“灯具”。这种方式与数据库无关,可以与任何DB django可以交谈使用。
  • 提供一组要运行的SQL脚本。您可以获得的好处是使用一些特定于数据库的数据类型/编程功能/等。但是,它被认为在Django 1.7中被弃用,将在Django 2.0中被删除
  • 创建一组data migrations(附带Django> = 1.7,早期版本使用South

此外,每次运行migrate时都可以加载初始数据:

  

如果您创建名为initial_data。[xml / yaml / json]的夹具,则每次运行迁移时都会加载该夹具。这非常方便,但要小心:请记住,每次运行迁移时都会刷新数据。所以不要将initial_data用于您想要编辑的数据。