2014-12-16 16 views
7

Jak zmusić django do użycia silnika magazynowania MYISAM podczas tworzenia bazy danych przy użyciu polecenia syncdb? Ta page nie pomaga wiele, aby rzucić światło na ten problem.Wymuś django do tworzenia tabel przy użyciu silnika magazynowania MYISAM

MYISAM jest idealnym wyborem, ponieważ baza danych jest prawie wyłącznie używana do czytania, a MYISAM jest znacznie szybszy niż InnoDB. W modelu są nadal dostępne pewne pola models.ForeignKey, ale są one używane tylko do tworzenia szczegółowych stron administracyjnych administratora. Nie ma potrzeby posiadania rzeczywistych kluczy obcych w bazie danych.

Odpowiedz

12

Zobacz this page. Używanie zmiennej OPTIONS w ustawieniu powinno załatwić sprawę, ale migracja istniejącej bazy danych do nowego silnika nie jest tak łatwa (należy ją ponownie zainicjować).

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.mysql', 
    'NAME': '',      
    'USER': '',  
    'PASSWORD': '', 
    'OPTIONS': { 
      "init_command": "SET storage_engine=MYISAM", 
    } 
    } 
} 
+1

Podpowiedź na migrację istniejącej db: prawdopodobnie będziesz chciał zrzucić na coś YAML i imporcie, że już w po odtworzyć schemat . – WhyNotHugo

+0

Powinien używać 'default_storage_engine' zamiast' storage_engine' dla mysql 5.7+ –

-1

Należy ustawić silnik pamięci jako INNODB w definicji bazy danych bezpośrednio, tak jak tutaj.

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     ..... 
     'STORAGE_ENGINE': 'MYISAM' 
    } 
} 

Dla nowej wersji można użyć:

DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.mysql', 
      ..... 
      'OPTIONS': { 
        "init_command": "SET storage_engine=MYISAM", 
         } 
     } 
    } 
+0

To nie działało dla mnie. Używam django 1.7 – bman

+0

dla mysql 6 potrzebujesz DEFAULT_STORAGE_ENGINE – YardenST

+0

i nawet wtedy nie działa dla mnie – YardenST

Powiązane problemy