Django legt die Speicher-Engine und den Standard-Zeichensatz fest

8

Erstellen meiner Tabellen von meinem models.py . Ich kann nicht 2 Dinge tun -

  1. Ich möchte MySQL angeben, um einige meiner Tabellen als InnoDB & amp; einige als MyISAM . Wie mache ich das?
  2. Ich möchte auch meine Tabellen DEFAULT CHARSET als utf8 angeben. Wie mache ich das?

Das sehe ich, wenn ich syncdb -

starte %Vor%

Ich benutze Ubuntu 10.04, Django 1.2.X, MySQL 5.1.X

UPDATE : Ich dachte, dies könnten MySQL-Standardeinstellungen sein & amp; Am Ende habe ich my.cnf geändert, wo ich default-character-set = utf8 hinzugefügt habe. Aber nutzlos.

    
Srikar Appalaraju 11.11.2010, 06:12
quelle

2 Antworten

17

Ich glaube nicht, dass Sie Storage-Engines Tabellen für Tabellen ändern können, aber Sie können dies Datenbank für Datenbank tun. Dies bedeutet natürlich, dass InnoDB-Fremdschlüsseleinschränkungen beispielsweise nicht auf Fremdschlüssel für MyISAM-Tabellen angewendet werden können.

Sie müssen also zwei "Datenbanken" deklarieren, die sich sehr gut auf demselben Server befinden können:

%Vor%

Und Sie müssen using('innodb') nur auf Abfragegruppen für Tabellen in InnoDB-Land anwenden.

Wie für UTF-8, denke ich, dass Sie dies auf Datenbankebene tun müssen. Ich glaube nicht, dass syncdb die Datenbank für Sie erstellt, nur die Tabellen. Sie sollten die Datenbank trotzdem manuell erstellen, damit Sie die Rechte festlegen können, bevor Sie syncdb ausführen. Der gewünschte Datenbankerstellungsbefehl lautet:

%Vor%

Das heißt, ich empfehle normalerweise, dass man zwei django-Benutzer in der Datenbank erstellt: einen für die Datenbankschemaarbeit ("admin") und einen für alles andere (mit verschiedenen Passwörtern):

%Vor%

(Beachten Sie, dass dies für jede Datenbank durchgeführt werden muss.)

Damit dies funktioniert, müssen Sie manage.py :

ändern %Vor%

Verwenden Sie in Ihrem settings.py die Umgebungsvariable, um die richtigen Einstellungen auszuwählen. Stellen Sie sicher, dass der Site-Benutzer (d. H. Nicht-Administrator) der Standardwert ist.

(Ich speichere auch nicht das Datenbank-Setup, SECRET_KEY oder irgendwas anderes in settings.py , weil mein Django-Projekt in Mercurial gespeichert ist; ich habe settings.py , das alles aus einer externen Datei bezieht nur von Djangos Benutzer und den Server-Admins. Ich werde das "Wie" als Übung für den Leser belassen ... weil ich einige davon in Antworten auf die Fragen anderer dargelegt habe, und ich bin zu faul, um es richtig nachzuschlagen jetzt.)

    
Mike DeSimone 11.11.2010, 06:44
quelle
2
%Vor%     
yesitsme 01.03.2015 16:47
quelle