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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章