9

my からテーブルを作成しますmodels.py。私は2つのことをする方法を知りません -

  1. MySQL一部のテーブルを としてInnoDB& 一部を として作成するように指定したいと思いますMyISAM。どうすればいいのですか?
  2. DEFAULT CHARSETまた、テーブルを として指定したいと思いますutf8。どうすればいいのですか?

これは私が走ったときに私が見るものですsyncdb-

...
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Ubuntu 10.04、Django 1.2.X、MySQL 5.1.X を使用しています

更新: これらは MySQL のデフォルト設定である可能性がありmy.cnf、追加した場所を変更することになりましdefault-character-set = utf8た。しかし、役に立たない。

4

2 に答える 2

18

テーブルごとにストレージ エンジンを変更できるとは思いませんが、データベースごとに変更することはできます。もちろん、これは、たとえば 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.pysettings.py

于 2010-11-11T06:44:02.270 に答える
2
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(32) NOT NULL,
  `lastname` varchar(32) NOT NULL,
  `gender` varchar(6) NOT NULL,
  `email` varchar(32) NOT NULL,
  `username` varchar(32) NOT NULL,
  `password` varchar(32) NOT NULL,
  `created` datetime NOT NULL,
  `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ;
于 2015-03-01T16:47:11.743 に答える