# Django 5.0.9.dev20240806133106 ドキュメント

# FAQ: データベースとモデル

## Django が実行している生の SQL クエリを見られますか？

Django の設定ファイルの `DEBUG` が `True` になっていることを確認します。次に、以下のコードを実行してください。

    >>> from django.db import connection
    >>> connection.queries
    [{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
    'time': '0.002'}]

`connection.queries` は `DEBUG` が `True` の場合にのみ利用できます。これはクエリの実行順に辞書を並べたリストです。各辞書には以下の項目が入っています:

- `sql` - 素のSQL構文
- `time` - ステートメントの実行に要した秒数。

`connection.queries` にはINSERT, UPDATE, SELECTなどの全てのSQL文が記録されています。アプリケーションがデータベースを操作するたびに、クエリが記録されていきます。

もし 複数のデータベース を利用している場合、 `connections` の辞書の各要素に対して、同じコードを実行できます:

    >>> from django.db import connections
    >>> connections["my_db_alias"].queries

もし、何らかの関数の中でクエリのリストをクリアする必要がある場合は、以下のように `reset_queries()` を実行します。

    from django.db import reset_queries

    reset_queries()

## 既存のデータベースで Django を使えますか？

使えます。古いデータベースの組み込み方 を参照してください。

## モデルを変更した時、どのようにデータベースを更新すればよいですか？

`スキーママイグレーション` に関するページを参照してください。

データが消えてもかまわないのなら、 `manage.py` ユーティリティの `flush` オプションを利用することで、データベースを `migrate` コマンドが実行された直後と同じ状態にすることができます。

## Django のモデルは複合主キーをサポートしますか？

いいえ。単一の主キーのみをサポートします。

しかし、それは実際には問題でありません。なぜなら、(`unique_together` モデルオプション追加やデータベースに直接制約を作るというような) 他の制約を追加することを妨げないし、そのレベルでユニーク性を強制しているからです。単一カラムのプライマリーキーは admin インターフェースを動かすのに必要なのです。それにより、オブジェクトの更新や削除が容易になるからです。

## Django で NoSQL データベースは利用できますか？

NoSQL データベースは Django では公式にはサポートされていません。しかし、多くのプロジェクトが NoSQL を Django で利用できるような機能を提供しています。

いくつかのプロジェクトについては the wiki page も参照してください。

## MyISAM ストレージエンジンを指定するといったような `CREATE TABLE` 文のデータベース固有のカスタマイズを追加するにはどうしたらよいでしょうか？

テーブル種別などデータベース固有のオプションに適応するために、 Django コード中に特殊なケースを追加するのを避けようとします。データベース固有のオプションを使いたければ、あなたが指定したい `ALTER TABLE` 文を含めた `RunSQL` を使ったマイグレーションを作成してください。

たとえば、 MySQL を使っていて、 MyISAM ストレージエンジンを使いたい場合、以下のSQLを使ってください:

    ALTER TABLE myapp_mytable ENGINE=MyISAM;