DjangoのORM
オブジェクトリレーショナルマッピング(ORM)は、オブジェクト指向データベースプログラム内のオブジェクトを、オブジェクトとデータベース間のマッピングを記述するメタデータを使用して、リレーショナルデータベースに自動的に永続化します。
リファレンスドキュメント:https://docs.djangoproject.com/zh-hans/2.2/topics/db/models/
Djangoデータベース構成
# settings文件下
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql", # 这里可以根据实际情况修改,譬如换成oracle、PostgreSQL等
"NAME": "数据库名称",
"USER": "用户名",
"PASSWORD": "密码",
"HOST": "数据库访问地址",
"POST": 3306 # Mysql数据库默认使用3306
}
}
モデルを構築する
モデルには、保存されたデータの重要なフィールドと動作が含まれています。
モデルはデータベーステーブルにマップされます。
モデル例
from django.db import models
class Students(models.Model):
name = models.CharField(max_length=30) # CharField为字段类型,max_length 为字段参数选项
age = models.IntegerField()
gender = models.BooleanField()
cs = models.ForeignKey('ClassInfo', on_delete=models.DO_NOTHING)
class ClassInfo(modes.Modell):
title = models.CharField(max_length=30)
実行、データテーブルの生成
python manage.py makemigrations
python manage.py migrate
一般的なフィールド
タイプ | 説明文 |
---|---|
AutoField | 自動的に拡大するIntegerField。通常、指定する必要はありません。指定しない場合、Djangoはidという名前の自動拡大属性を自動的に作成します。 |
BooleanField | ブールフィールド。値はTrueまたはFalseです。 |
NullBooleanField | Null、True、Falseの3つの値をサポートします。 |
CharField(max_length = max length) | 文字列。パラメータmax_lengthは最大文字数を表します。 |
テキストフィールド | 大きなテキストフィールド。通常、4000文字を超える場合に使用されます。 |
IntegerField | 整数 |
DecimalField(max_digits = None、decimal_places = None) | 10進浮動小数点数。パラメータmax_digitsは総桁数を表します。パラメータdecimal_placesは、小数点以下の桁数を表します。 |
FloatField | 浮動小数点数。上記と同じパラメーター |
DateField:([auto_now = False、auto_now_add = False]) | 日付。1)パラメータauto_nowは、オブジェクトが保存されるたびに、このフィールドは自動的に現在の時刻に設定され、「最終変更」タイムスタンプに使用され、常に現在の日付を使用し、デフォルトはfalseであることを意味します。2)パラメータauto_now_addは、オブジェクトが初めて作成されたときに現在の時刻が自動的に設定されることを示します。これは、タイムスタンプの作成に使用されます。常に現在の日付を使用し、デフォルトはfalseです。3)パラメータauto_now_addとauto_nowは相互に排他的であり、組み合わせてエラーが発生します。 |
TimeField | 時間とパラメーターはDateFieldと同じです。 |
DateTimeField | 日付と時刻。パラメーターはDateFieldと同じです。 |
FileField | ファイルフィールドをアップロードします。 |
ImageField | FileFieldから継承され、アップロードされたコンテンツを検証して、それが有効な画像であることを確認します。 |
フィールド選択
一般的なオプション
オプション名 | 説明文 |
---|---|
デフォルト | デフォルト値。デフォルト値を設定します。 |
primary_key | Trueの場合、フィールドはモデルの主キーフィールドになります。デフォルト値はFalseで、通常AutoFieldのオプションとして使用されます。 |
ユニークな | Trueの場合、このフィールドにはテーブル内で一意の値が必要です。デフォルト値はFalseです。 |
db_index | 値がTrueの場合、テーブルのこのフィールドにインデックスが作成されます。デフォルト値はFalseです。 |
db_column | フィールドの名前。指定しない場合、属性の名前が使用されます。 |
ヌル | Trueの場合、空にすることが許可され、デフォルト値はFalseです。 |
ブランク | Trueの場合、フィールドは空白にでき、デフォルト値はFalseです。 |
リレーショナルテーブルのオプション
ForeignKey外部キーアソシエーション
通常、ForeignKeyフィールドは、「1対多」の「多」側に設定されます。
ForeignKeyは、他のテーブルまたはそれ自体に関連付けることができます。
オプション名 | 説明文 |
---|---|
に | 関連付けるテーブルを設定します |
フィールドに | 関連付けるテーブルのフィールドを設定します |
related_name | 逆操作で使用されるフィールド名は、元の逆クエリの「テーブル名セット」を置き換えるために使用されます |
related_query_name | 逆クエリ操作で使用される接続接頭辞。テーブル名を置き換えるために使用されます。 |
on_delete | 関連テーブルのデータを削除するときの、現在のテーブルとそれに関連する行の動作。 |
db_constraint | データベースに外部キー制約を作成するかどうか、デフォルトはTrueです。 |
- on_deleteオプション
オプション名 | 説明文 |
---|---|
モデル.CASCADE | 関連データを削除し、関連データを削除します |
models.DO_NOTHING | 関連データを削除し、エラーをスローしますIntegrityError |
models.PROTECT:删除关联数据,引发错误ProtectedError
models.SET_NULL:删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
models.SET_DEFAULT:删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
models.SET|删除关联数据,. 与之关联的值设置为指定值或者可执行对象的返回值,设置:models.SET(值)
ManyToManyField多对多
用于表示多对多的关联关系,在数据库中通过第三张表来建立关联关系。
选项名 | 描述 |
---|---|
to | 设置要关联的表 |
related_name | 反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’ |
related_query_name | 反向查询操作时,使用的连接前缀,用于替换表名 |
symmetrical | 仅用于多对多自关联时,指定内部是否创建反向操作的字段。默认为True。 |
through | 在使用ManyToManyField字段时,Django将自动生成一张表来管理多对多的关联关系,也支持手动创建第三张表,此时就需要通过through来指定第三张表的表名。 |
through_fields | 设置关联的字段。 |
db_table | 默认创建第三张表时,数据库中表的名称。 |
DatetimeField、DateField、TimeField特有参数
选项名 | 描述 |
---|---|
auto_now_add | 配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。 |
auto_now | 配置上auto_now=True,每次更新数据记录的时候会更新该字段。 |