Press "Enter" to skip to content

Posts published in “每日归档: 2007年11月22日

感恩节,感谢所有的人

感恩节,一个并不属于我们的节日,不过借这个日子,感谢一下身边的人吧。 首先要感谢我的父母。作为典型的人山东人,尤其是农村里出来的人,我们的感情很内敛。父母把我养这么大,还养的这么好,借钱供我读书,把我送出农村,自己却累弯…

Django: 初始化数据及安装时代码

原文地址:http://www.b-list.org/weblog/2007/nov/21/install-time/

PS:The B-List是个很牛的Django博客,大量的技巧和教程,英语好的一定要去订阅,怕看英语的,就等我的翻译吧。

经常被问到的一个问题是:我怎么样为我的app提供初始化数据?或者一个相似的问题:我怎么样保证我的程序在通过syncdb安装的同时运行某些代码。Django提供了多种途径实现这个功能,你可以根据具体的需求选择不同的实现方式。虽然这些功能在文档里都已经说明了,但是还是会遇到很多问题,所以我们今天仔细看看各种不同的方式之间的区别,了解哪一种更适合你。

提供SQL语句初始化数据

这是最古老的方式(从Django一开始就有这个功能)也是最简单的方式(不管是你需要做的部分,还是它所支持的功能)来为你的Application提供一些初始化数据:你只需要提供一个SQL文件,包含标准的Insert语句,Django会在创建了数据表以后执行你的SQL文件。

要使用该方式,你需要在你的app目录下增加一个"sql"目录,对应你的每个model所需要的初始化数据,提供一个"model名.sql"的文件,model名是跟你定义的model相同的名字(这里使用小写,也就是get_model()方法返回的名字或者在model的meta信息中定义的model名字)。比如,我有一个名为blog的application,其中包含一个Entry的model,那我就可以在blog里面的sql目录下放一个entry.sql文件,里面写insert语句就可以了。

在这个文件里你也可以放其它的SQL语句,不仅仅是INSERT,但是需要提醒你,同一个app的多个SQL初始化文件,其执行顺序是不一定的,而且也不是所有的SQL语法都支持。为了处理不同的数据库类型的SQL兼容性,Django会对该文件进行处理,而不是直接去执行它。

你可以使用manage.py的sqlcustom命令查看一个app是否提供了初始化SQL。