2009-08-20 7 views
11

Docs sur creating your database tables dit:Pourquoi supprimer "init_command set engine = INNODB" de django DATABASE_OPTIONS après la création de la table?

Une autre option consiste à utiliser l'option init_command pour MySQLdb avant de créer vos tables:

DATABASE_OPTIONS = { 
    "init_command": "SET storage_engine=INNODB", 
} 

Ceci définit le moteur de stockage par défaut lors de la connexion à la base de données. Une fois que vos tables ont été créées, vous devez supprimer cette option. ajoute une requête qui est uniquement nécessaire lors de la création de la table à chaque connexion de base de données .

Est-ce que quelqu'un sait pourquoi est-il nécessaire de supprimer cette option après la création de la table?

Répondre

4

Généralement, les autorisations et les paramètres sont basés sur l'arborescence. Vos paramètres pour la session seront un pointeur vers les paramètres par défaut au-dessus du vôtre. Vos paramètres de session vont être déjà créés et référencer simplement les paramètres par défaut lors de votre première connexion. Lorsque vous modifiez un paramètre, par exemple en définissant la valeur storage_engine, vous créez une nouvelle copie de tous les paramètres et modifiez une valeur (comme dans Apache) ou ajoutez une autre couche à l'arborescence dont elle a besoin. vérifier lors de la résolution des valeurs. Je ne suis pas vraiment sûr de ce que MySQL utilise, mais de toute façon, si vous n'avez pas besoin de ce paramètre, vous ne devriez pas le définir à chaque aller-retour.

Si vous en avez besoin assez fréquemment, cela pourrait valoir le coup. Un problème similaire se produit en PHP. Vous ne voulez pas modifier des variables comme le chemin d'inclusion de PHP dans votre code PHP, qui permet d'ajouter une tonne d'overhead.

Jacob

+1

Merci, c'est logique. – ajitomatix

3

Si vous avez d'autres options, par exemple:

DATABASE_OPTIONS = { "init_command": "SET storage_engine = InnoDB, wait_timeout = 30, time_zone = ...", }

alors il ne fait pas de mal à quitter le jeu de moteur de stockage par défaut.

6

Syntaxe a changé de django 1,2

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

La suppression de cette option pour rendre les choses efficaces - vous n'avez pas besoin de mettre le moteur de stockage à chaque fois que vous vous connectez à la base de données, uniquement lorsque vous créez des tables (c.-à- syncdb, sud).

Questions connexes