sql >> Database >  >> RDS >> Mysql

Django set Storage Engine &Standaard Charset

Ik denk niet dat je storage-engines per tabel kunt wijzigen, maar wel per database. Dit betekent natuurlijk dat InnoDB-beperkingen voor externe sleutels bijvoorbeeld niet van toepassing kunnen zijn op externe sleutels in MyISAM-tabellen.

U moet dus twee "databases" declareren, die heel goed op dezelfde server kunnen staan:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        #...
    }
    'innodb': {
        'ENGINE': 'django.db.backends.mysql',
        #...
        'OPTIONS': { 'init_command': 'SET storage_engine=INNODB;' }
    }
}

En je hoeft alleen using('innodb') . toe te passen naar querysets voor tabellen in InnoDB land.

Wat betreft UTF-8, nogmaals, ik denk dat je dit op databaseniveau moet doen. Ik denk niet dat syncdb maakt de database voor u aan, alleen de tabellen. U moet de database hoe dan ook handmatig maken, zodat u rechten kunt instellen voordat u syncdb uitvoert . De gewenste opdracht voor het maken van een database is:

CREATE DATABASE django CHARACTER SET utf8;

Dat gezegd hebbende, raad ik mensen gewoonlijk aan om twee django-gebruikers in de database aan te maken:één voor databaseschemawerk ("admin") en één voor al het andere (met verschillende wachtwoorden):

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;

(Merk op dat dit voor elke database moet worden gedaan.)

Om dit te laten werken, moet u manage.py . aanpassen :

import sys
if len(sys.argv) >= 2 and sys.argv[1] in ["syncdb", "dbshell", "migrate"]:
    os.environ['DJANGO_ACCESS'] = "ADMIN"

Dan in je settings.py , gebruik de omgevingsvariabele om de juiste instellingen te kiezen. Zorg ervoor dat de gebruiker van de site (d.w.z. niet-beheerder) de standaardgebruiker is.

(Bovendien sla ik de database-instellingen niet op, SECRET_KEY , of iets anders gevoeligs in settings.py omdat mijn Django-project is opgeslagen in Mercurial; Ik heb settings.py haal dat allemaal uit een extern bestand dat alleen toegankelijk is voor de gebruiker van Django en de serverbeheerders. Ik laat het "hoe" als oefening voor de lezer... omdat ik een deel ervan heb uitgewerkt in antwoorden op de vragen van anderen, en ik ben te lui om het nu op te zoeken.)



  1. Hoe een rij kopiëren en in dezelfde tabel invoegen met een autoincrement-veld in MySQL?

  2. Hoe u uw MySQL-instanties kunt laten mislukken of crashen voor testen

  3. Verbinding maken met SQL Server met Windows-authenticatie van Node.JS met behulp van de mssql-module

  4. Converteer SQLITE SQL-dumpbestand naar POSTGRESQL