sql >> データベース >  >> RDS >> Mysql

Djangoはストレージエンジンとデフォルトの文字セットを設定しました

    テーブルごとにストレージエンジンを変更できるとは思いませんが、データベースごとに変更することはできます。もちろん、これは、たとえば、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で 、環境変数を使用して適切な設定を選択します。サイト(つまり、管理者以外)のユーザーがデフォルトであることを確認してください。

    (さらに、データベース設定、SECRET_KEYは保存しません 、またはsettings.pyで機密性の高いもの 私のDjangoプロジェクトはMercurialに保存されているからです。 settings.pyがあります Djangoのユーザーとサーバー管理者だけがアクセスできる外部ファイルからすべてをプルインします。 「方法」は読者の練習問題として残しておきます...他の人の質問への回答でその一部を詳しく説明したので、今すぐ調べるのが面倒です。)



    1. 結合されたテーブル列の個別の合計を取得します

    2. SQLServerの末尾のスペースを含まないLEN関数

    3. MySQLはソートにインデックスを使用しますか?

    4. MySQL-concatおよびgroup_concatを使用して行の値を列名として表示する方法