django创建表时附加数据库自定义选项的方法——如指定数据库的存储引擎

 

    在使用django的syncdb创建表时,如果想给建表SQL附加特定的选项——比如MySQL数据库默认存储引擎是MyISAM,但想让所有新建的表都为InnoDB引擎的——可以通过增加settings.py文件里的DATABASES里的选项来实现,也可以通过自动执行initial SQL data来实现。

 

 

    一. 修改settings.py的方式


    在DATABASES字典的数据库实例中增加OPTION字典, 代码如下:

OPTION字典可以使用许多key,可以参考http://mysql-python.sourceforge.net/MySQLdb.html#functions-and-attributes

我们这里使用'init_command': 'SET storage_engine=INNODB'指定创建每个表时都使用INNODB引擎。

 

这个附加信息不会在python manage.py sqlall appname打印出的SQL里出现,

但我们在MySQL客户端中执行“show create table table_name;“可以看到 ……ENGINE=InnoDB ……这样的语句

 

这个方法存在的一些问题:

1. 在OPTION里增加‘use_unicode’: True , 'charset': 'gbk'这样的信息无法改变创建表的默认字符集

2. 使用'init_command': ‘SET NAMES “gbk”’ 也无法改变创建表的默认字符集

3. 找不到init_command如何使用的文档,不知道怎样使用它附加其它的选项

 

 

    二、自动执行initial SQL data的方式


使用python manage.py syncdb初始化数据库时,Django会寻找路径为 <appname>/sql/<modelname>.<backend>.sql的文件——如果appname是am,modelname是Student,数据库后端是django.db.backends.mysql,那么文件路径就是am/sql/student.mysql.sql(模块名Student转换成小写的student)——然后执行它。

 

可以在这个sql文件里加入这样的语句:

初始化后,我们就可以用show create table T_VLR_REPORT_TAB; 看到存储引擎和默认字符集已经改了,同时我们也可以看到 myapp_person表里有2行数据。

 

参考链接:http://docs.djangoproject.com/en/dev/ref/databases/#connecting-to-the-database

                    http://docs.djangoproject.com/en/dev/howto/initial-data/#initial-sql

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值