sql >> Databáze >  >> RDS >> Mysql

Django nastavil Storage Engine &Default Charset

Nemyslím si, že můžete měnit moduly úložiště na bázi tabulky po tabulce, ale můžete to udělat na bázi databáze po databázi. To samozřejmě znamená, že omezení cizích klíčů InnoDB se například nemohou vztahovat na cizí klíče tabulek MyISAM.

Takže musíte deklarovat dvě "databáze", které mohou být velmi dobře na stejném serveru:

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

A stačí použít using('innodb') na sady dotazů pro tabulky v zemi InnoDB.

Pokud jde o UTF-8, znovu si myslím, že to musíte udělat na úrovni databáze. Nemyslím si, že syncdb vytvoří databázi za vás, pouze tabulky. I tak byste měli databázi vytvořit ručně, takže můžete mít nastavená oprávnění těsně před spuštěním syncdb . Požadovaný příkaz pro vytvoření databáze je:

CREATE DATABASE django CHARACTER SET utf8;

To znamená, že obvykle doporučuji, aby lidé vytvořili v databázi dva uživatele django:jednoho pro práci se schématem databáze ("admin") a druhého pro vše ostatní (s různými hesly):

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;

(Všimněte si, že to je třeba provést pro každou databázi.)

Aby to fungovalo, musíte upravit manage.py :

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

Poté ve vašem settings.py , použijte proměnnou prostředí k výběru správného nastavení. Ujistěte se, že uživatel webu (tj. uživatel, který není správcem) je výchozí.

(Navíc neukládám nastavení databáze, SECRET_KEY , nebo cokoli jiného citlivého v settings.py protože můj projekt Django je uložen v Mercurialu; Mám settings.py stáhnout vše z externího souboru přístupného pouze uživateli Django a správcům serveru. "Jak" nechám jako cvičení pro čtenáře... protože některé jsem podrobně popsal v odpovědích na otázky ostatních a jsem líný to teď hledat.)



  1. výsledek dotazu mysql do pole php

  2. PostgreSQL Connection Pooling:Část 1 – Klady a zápory

  3. Uložení změn po úpravě tabulky v SQL Server Management Studio

  4. Knihovna není načtena:chyba libmysqlclient.16.dylib při pokusu o spuštění „rails serveru“ v OS X 10.6 s gem mysql2