Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。

交流群:467338606

网站:http://python.usyiyi.cn/django/index.html

为模型提供初始数据

当你首次建立一个应用的时候,为你的数据库预先安装一些硬编码的数据,是很有用处的。 有几种方法可以让Django自动创建这些数据:你可以通过fixtures提供初始数据,或者提供一个包含初始数据的sql文件。

通常来讲,使用fixtrue更加简洁,因为它是数据库无关的,而使用sql初始化更加灵活。

提供初始数据的fixtures

fixture是数据的集合,让Django了解如何导入到数据库中。创建fixture的最直接的方式,是使用manage.py dumpdata命令,如果数据库中已经有了一些数据。或者你可以手写fixtures。fixtures支持JSON、XML或者YAML(需要安装PyYAML)文档。序列化文档中详细阐述了每一种所支持的序列化格式。

下面这个例子展示了一个简单的Person 模型的fixtrue,看起来很像JSON:

[{"model": "myapp.person","pk": 1,"fields": {"first_name": "John","last_name": "Lennon"}},{"model": "myapp.person","pk": 2,"fields": {"first_name": "Paul","last_name": "McCartney"}}
]

下面是它的YAML格式:

- model: myapp.person
  pk: 1fields:first_name: Johnlast_name: Lennon
- model: myapp.person
  pk: 2fields:first_name: Paullast_name: McCartney

你可以把这些数据储存在你应用的fixtures目录中。

加载数据很简单:只要调用manage.py loaddata <fixturename>就好了,其中<fixturename>是你所创建的fixture文件的名字。每次你运行loaddata的时候,数据都会从fixture读出,并且重复加载进数据库。注意这意味着,如果你修改了fixtrue创建的某一行,然后再次运行了 loaddata,你的修改将会被抹掉。

自动加载初始数据的fixtures

1.7中废除:如果一个应用使用了迁移,将不会自动加载fixtures。由于Django 1.9中,迁移将会是必要的,这一行为经权衡之后被废除。 如果你想在一个应用中加载初始数据,考虑在数据迁移中加载它们。

如果你创建了一个命名为 initial_data.[xml/yaml/json]的fixtrue,在你每次运行migrate命令时,fixtrue都会被加载。这非常方面,但是要注意:记住数据在你每次运行migrate命令后都会被刷新。So don’t use initial_data for data you’ll want to edit.

Django在哪里寻找fixture文件

通常,Django 在每个应用的fixtures目录中寻找fixture文件。你可以设置FIXTURE_DIRS选项为一个额外目录的列表,Django会从里面寻找。

运行manage.py loaddata命令的时候,你也可以指定一个fixture文件的目录,它会覆盖默认设置中的目录。

另见

fixtrues也被用于测试框架来搭建一致性的测试环境。

提供初始SQL数据

1.7中废除:如果一个应用使用迁移,初始SQL数据将不会加载(包括后端特定的SQL数据)。由于Django 1.9中,迁移将会是必须的,这一行为经权衡后被废除。如果你想在应用中使用初始SQL数据,考虑在数据迁移中使用它们。

Django为数据库无关的SQL提供了一个钩子,当你运行migrate命令时,CREATE TABLE语句执行之后就会执行它。你可以使用这个钩子来建立默认的记录,或者创建SQL函数、视图、触发器以及其它。

钩子十分简单:Django会在你应用的目录中寻找叫做sql/<modelname>.sql的文件,其中 <modelname>是小写的模型名称。

所以如果在myapp应用中存在Person模型,你应该在myapp目录的文件sql/person.sql中添加数据库无关的SQL。下面的例子展示了文件可能会包含什么:

INSERT INTO myapp_person (first_name, last_name) VALUES ('John', 'Lennon');
INSERT INTO myapp_person (first_name, last_name) VALUES ('Paul', 'McCartney');

每个提供的SQL文件,都应该含有用于插入数据的有效的SQL语句(例如,格式适当的INSERT语句,用分号分隔)。

这些SQL文件可被manage.py中的 sqlcustom和sqlall命令阅读。详见manage.py文档。

注意如果你有很多SQL数据文件,他们执行的顺序是不确定的。唯一可以确定的是,在你的自定义数据文件被执行之前,所有数据表都被创建好了。

初始SQL数据和测试

这一技巧不能以测试目的用于提供初始数据。Django的测试框架在每次测试后都会刷新测试数据库的内容。所以,任何使用自定义SQL钩子添加的数据都会丢失。

如果你需要在测试用例中添加数据,你应该在测试fixture中添加它,或者在测试用例的setUp()中添加。

数据库后端特定的SQL数据

没有钩子提供给后端特定的SQL数据。例如,你有分别为PostgreSQL和SQLite准备的初始数据文件。对于每个应用,Django都会寻找叫做<app_label>/sql/<modelname>.<backend>.sql的文件,其中<app_label>是小写的模型名称,<modelname>是小写的模型名称,<backend>是你的设置文件中由ENGINE提供的模块名称的最后一部分(例如,如果你定义了一个数据库,ENGINE的值为django.db.backends.sqlite3,Django会寻找<app_label>/sql/<modelname>.sqlite3.sql)。

后端特定的SQL数据会先于后端无关的SQL数据执行。例如,如果你的应用包含了sql/person.sql 和sql/person.sqlite3.sql文件,而且你已经安装了SQLite应用,Django会首先执行 sql/person.sqlite3.sql的内容,其次才是sql/person.sql。

django 1.8 官方文档翻译: 2-6-3 提供初始数据相关推荐

  1. django 1.8 官方文档翻译: 2-5-7 自定义查找

    自定义查找 New in Django 1.7. Django为过滤提供了大量的内建的查找(例如,exact和icontains).这篇文档阐述了如何编写自定义查找,以及如何修改现存查找的功能.关于查 ...

  2. django 1.8 官方文档翻译:14-1 按需内容处理

    按需内容处理 HTTP客户端可能发送一些协议头来告诉服务端它们已经看过了哪些资源.这在获取网页(使用HTTPGET请求)时非常常见,可以避免发送客户端已经获得的完整数据.然而,相同的协议头可用于所有H ...

  3. django 1.8 官方文档翻译:5-1-2 表单API

    表单 API 关于这篇文档 这篇文档讲述Django 表单API 的详细细节.你应该先阅读表单简介. 绑定的表单和未绑定的表单 表单要么是绑定的,要么是未绑定的. 如果是绑定的,那么它能够验证数据,并 ...

  4. django 1.8 官方文档翻译: 3-3-4 管理文件

    管理文件 这篇文档描述了Django为那些用户上传文件准备的文件访问API.底层的API足够通用,你可以使用为其它目的来使用它们.如果你想要处理静态文件(JS,CSS,以及其他),参见管理静态文件(C ...

  5. django 1.8 官方文档翻译: 3-5-1 使用Django输出CSV

    使用Django输出CSV 这篇文档阐述了如何通过使用Django视图动态输出CSV (Comma Separated Values). 你可以使用Python CSV 库或者Django的模板系统来 ...

  6. django 1.8 官方文档翻译: 3-3-1 文件上传

    文件上传 当Django在处理文件上传的时候,文件数据被保存在request. FILES (更多关于 request 对象的信息 请查看 请求和响应对象).这篇文档阐述了文件如何上传到内存和硬盘,以 ...

  7. django 1.8 官方文档翻译: 6-1-1 Django 的设置

    Django 的设置 Django 的设置文件包含你安装的Django 的所有配置.这页文档解释设置是如何工作以及有哪些设置. 基础 设置文件只是一个Python 模块,带有模块级别的变量. 下面是一 ...

  8. django 1.8 官方文档翻译: 3-6-2 内建的中间件

    Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质. 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html ...

  9. django 1.8 官方文档翻译: 2-4-4 编写迁移

    Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质. 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html ...

最新文章

  1. sqlserver bulk insert
  2. java实现输出字符串中的数字字符
  3. BroadcastReceiver之动态广播 demo+笔记
  4. 单片机中volatile的应用
  5. 7.2.5 dps 测试软件,魔兽7.2.5版本DPS专精Reroll指南视频:近战篇
  6. 数据挖掘算法和实践(八):K-means 聚类(西瓜数据集)
  7. 中职计算机基础辅导书,中职计算机基础 (938)(16页)-原创力文档
  8. 企业邮箱客户端怎么选?哪个更好用?
  9. python库包的安装方法_python包,库安装的6个方法
  10. 无可比拟的视觉环绕感 电子竞技游戏显示器就该选这样的带鱼屏
  11. 教养,就是要让别人舒服
  12. 为什么要学习数据结构?
  13. Delphi Thread 多线程编程(6)
  14. 如何检测时间序列中的异方差(Heteroskedasticity)
  15. 医学知识-FFR(冠状动脉血流储备分数)
  16. router vue 多个路径_vue-router 路由 总结
  17. Nancy启用跨站攻击防护(CSRF)
  18. 科学计数法转成正常数字
  19. microsoft 的gpt2模型源码学习记录
  20. LibcSearcher报错:no matched libc,please add more libc or try others

热门文章

  1. (32)SystemVerilog语言编写打两拍
  2. linux下dds软件,【数据库】Linux 单实例环境下实现Oracle数据库和DDS软件的开机自动重启...
  3. java线程等待_java 中线程等待与通知的实现
  4. python图论库_Python 图论工具
  5. 思维导图_教学工具思维导图
  6. 【声学基础】概述——振动学
  7. squid 的配置详解 (转)--SeriesIV
  8. 在c语言中定义共用型数据类型的关键字是,C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键...
  9. c语言程序可以单独编译,c语言的函数能单独进行编译吗?
  10. mysql join 与 cross join 效率_浅析Mysql Join语法以及性能优化