テーブルごとにストレージ エンジンを変更できるとは思いませんが、データベースごとに変更することはできます。もちろん、これは、たとえば InnoDB の外部キー制約が MyISAM テーブルの外部キーに適用できないことを意味します。
したがって、2 つの「データベース」を宣言する必要があります。これは、同じサーバー上にある可能性が非常に高くなります。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
#...
}
'innodb': {
'ENGINE': 'django.db.backends.mysql',
#...
'OPTIONS': { 'init_command': 'SET storage_engine=INNODB;' }
}
}
using('innodb')
そして、InnoDB ランドのテーブルのクエリセットに適用するだけで済みます。
UTF-8 についても、データベース レベルで行う必要があると思います。syncdb
データベースを作成するのではなく、テーブルだけを作成すると思います。実行する直前に権限を設定できるように、とにかく手動でデータベースを作成する必要がありますsyncdb
。必要なデータベース作成コマンドは次のとおりです。
CREATE DATABASE django CHARACTER SET utf8;
そうは言っても、私は通常、データベースに 2 つの django ユーザーを作成することをお勧めします。1 つはデータベース スキーマ作業用 (「admin」) で、もう 1 つはその他すべて (異なるパスワードを使用) 用です。
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;
(これはデータベースごとに行う必要があることに注意してください。)
これを機能させるには、次のように変更する必要がありますmanage.py
。
import sys
if len(sys.argv) >= 2 and sys.argv[1] in ["syncdb", "dbshell", "migrate"]:
os.environ['DJANGO_ACCESS'] = "ADMIN"
次にsettings.py
、環境変数を使用して適切な設定を選択します。サイト (つまり、非管理者) ユーザーがデフォルトであることを確認してください。
(さらに、私の Django プロジェクトは Mercurial に保存されているため、データベースのセットアップSECRET_KEY
やその他の機密情報は保存しません。Django のユーザーとサーバー管理者のみがアクセスできる外部ファイルからすべてを取得しました。 「方法」は読者の演習として残しておきます...他の人の質問への回答でその一部を詳しく説明したため、今すぐ調べるのが面倒です。)settings.py
settings.py