मुझे नहीं लगता कि आप टेबल-दर-टेबल आधार पर स्टोरेज इंजन बदल सकते हैं, लेकिन आप इसे डेटाबेस-दर-डेटाबेस आधार पर कर सकते हैं। बेशक, इसका मतलब है कि 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 भूमि में तालिकाओं के लिए क्वेरीसेट के लिए।
यूटीएफ -8 के लिए, फिर से, मुझे लगता है कि आपको इसे डेटाबेस स्तर पर करने की ज़रूरत है। मुझे नहीं लगता syncdb
आपके लिए डेटाबेस बनाता है, बस टेबल। आपको वैसे भी डेटाबेस को मैन्युअल रूप से बनाना चाहिए, ताकि आप syncdb
running चलाने से ठीक पहले विशेषाधिकार सेट कर सकें . डेटाबेस निर्माण आदेश जो आप चाहते हैं वह है:
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 प्रोजेक्ट Mercurial में संग्रहीत है; मेरे पास settings.py
है केवल Django के उपयोगकर्ता और सर्वर व्यवस्थापक द्वारा सुलभ बाहरी फ़ाइल से वह सब खींचें। मैं पाठक के लिए एक अभ्यास के रूप में "कैसे" छोड़ दूंगा ... क्योंकि मैंने इसका कुछ विस्तार दूसरों के सवालों के जवाब में किया है, और मैं इसे अभी देखने के लिए बहुत आलसी हूं।)