我不認爲你可以逐個更換存儲引擎,但是你可以在逐個數據庫的基礎上進行。這當然意味着例如InnoDB外鍵約束不能應用於MyISAM表的外鍵。
所以你需要聲明兩個「數據庫」,這很可能是在同一臺服務器上:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
#...
}
'innodb': {
'ENGINE': 'django.db.backends.mysql',
#...
'OPTIONS': { 'init_command': 'SET storage_engine=INNODB;' }
}
}
而你只需要申請using('innodb')
到查詢集在InnoDB的土地表。
至於UTF-8,我認爲你需要在數據庫級別做到這一點。我不認爲syncdb
爲你創建數據庫,只是表格。您應該手動創建數據庫,因此您可以在運行syncdb
之前設置權限。你想在數據庫創建命令是:
CREATE DATABASE django CHARACTER SET utf8;
這就是說,我通常建議人們在數據庫中創建兩個Django的用戶:一個數據庫模式工作(「管理員」),一個用於一切(用不同的密碼):
CREATE DATABASE django CHARACTER SET utf8;
CREATE USER 'django_site'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON django.* TO django_site;
CREATE USER 'django_admin'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON django.* TO django_admin;
GRANT CREATE, DROP, ALTER, INDEX, LOCK TABLES ON django.* TO django_admin;
FLUSH PRIVILEGES;
(請注意,這需要爲每個數據庫做)
對於這個工作,你需要修改manage.py
:
import sys
if len(sys.argv) >= 2 and sys.argv[1] in ["syncdb", "dbshell", "migrate"]:
os.environ['DJANGO_ACCESS'] = "ADMIN"
然後在您的settings.py
中,使用環境變量選擇正確的設置。確保網站(即非管理員)用戶是默認用戶。
(另外,我不存儲數據庫設置,SECRET_KEY
,或其他任何敏感settings.py
,因爲我的Django項目存儲在水銀;我有settings.py
把所有在僅由Django的用戶和訪問的外部文件服務器管理員,我將離開「如何」作爲讀者的練習......因爲我詳細解釋了其中一些問題的答案,而我現在懶得查看它。)
好了,你可以* *在一個數據庫InnoDB的混合和MyISAM。當我的一些外鍵沒有被執行並且其中一些外鍵的時候,我學到了這一點。因此,將MySQL默認表類型設置爲InnoDB是一個好主意。否則,即使轉儲和隨後的重新加載也會改變表類型,如果您忘記轉儲此信息。 – 2010-11-11 12:28:22
你能解釋一下'use('innodb')'的意思和在哪裏添加它? – 2012-02-11 08:19:32
默認情況下,'QuerySet'使用'settings.DATABASES ['default']'中指定的數據庫。爲了使用不同的數據庫(例如,在上面的示例中名爲innodb的那個數據庫),您需要調用QuerySet的''using'函數(例如'Foo.objects.filter(...)。using ( 'innodb的')')。 – 2012-02-11 13:53:32