ディレクトリ
集計クエリ
カスケード削除カスケードの更新(外部キー制約フィールド持ち込ま)
外部キーフィールドのデータ管理オペレーティング
本を、多くの関係を公開すると、その本の中で外部キーフィールドである
本の出版のフィールドが削除されたこの時間は自動的に削除するように対応し
ますが、公開する場合、この時間を対応するテーブルの出版社の主キーが主キーの値が変更されますので、社会が変化しています
集計関数
重合パケット機能しなければならないの後
、実際にデフォルトのパケットなしのグループであります
- キーワード
aggregate
- また、あなたはモジュールをインポートする必要があります
from django.db.models import Max,Min,Sum,Avg,Count
res = models.Book.objects.aggregate(sm = Sum('price'))
res = models.Book.objects.aggregate(Max('price'),Min('prince'),Sum('price'),Count('price'),Avg('price'))
クエリをグループ化
mysql
とともにgroup by
ときにグループ
各部門の1統計的平均給与
2.各部門の男女比の統計に男性
1.キーワードannotate
重合による2機能ではどのようなパケットで何かすることによりバックdjango.db.models import Max,Min,Sum,Avg,Count
django
models
统计每一本书的作者人数 书名
res = models.Book.objects.annotate(author_num = Count('authors__id')).values('author_num','title')
FとQの問合せ
from django.db.models import F,Q
Fは、テーブル内の対応するフィールドの値を取得することができます
1.查询库存数大于卖出数的书
res = models.Book.objects.filter(kun_cun__gt = F('mai_cun')).values('title') # 后面的条件是数据库的其他字段值
2.将所有书的价格上涨100块
models.Book.objects.all().update(price=F('price')+100)
3.将所有书的名称后面全部加上"爆款"后缀 (了解知识点) 操作字符串数据要借助Concat方法
from django.db.models.functions import Concat
from django.db.models import Value
models.Book.bojects.update(title=Concat(F('title'),Value('爆款')))
Qクエリ
models.Book.objects.filter(Q(title='xxx'),Q(kun_cun=500)) # Q包裹后 , 还是and关系
models.Book.objects.filter(Q(title='xxx') | Q(kun_cun=500)) # | 就是or的关系
models.Book.objects.filter(`Q(title='xxx') | Q(kun_cun=500)) # ` 就是not的关系
Qは、高度な使用法オブジェクト
q = Q()
q.connector = 'or' # 默认是and 可以改成or
q.children.append(('tltle','xxx'))
models.Book.objects.filter(`q) # `取反
orm
フィールドとパラメータ
VARCHAR(254)auto_now:各データの修正時刻が自動的に現在時刻がリアルタイムの更新がアップ修正更新しますauto_now_add:データを作成する際に、現在の時間の後に変更されない限りません自動的に行うには、自動的に記録されます人工的に改変(あなたが唯一のブールTrueまたはそれが自動的に1/0に保存された虚偽を渡す必要があるとき、フィールドに格納されている)ブール値のテキストの大部分保つように設計されたファイルパス保存するように設計されたupload_to = Aをこのフィールドは値によって渡されたときにダイレクトファイルオブジェクト指定されたファイルパスにファイルがupload_to背後のオブジェクトに自動的に保存され、データベース内のパスセーブ10バイナリ小数点パラメータ:max_digits、分数全長decimal_places、小数の長さCharField
varchar
IntegerField
int
BigInterField
bigint
EmailField
DateField
DateField
DateTimeField
AutoField
auto_increment
BooleanField
TextField
FileField
'/etc/data/a.txt'
'/etc/data'
DecimalField(Field)
フィールドパラメータ
nullは、フィールドが空であることを示し、
ユニーク=トゥーレユニークセットした場合、このフィールドは、この表内で一意である必要があります
このパラメータがTrueに設定されているdb_index場合、このフィールドは、インデックスを示し(カドガンの書き込み速度に影響する指標)
デフォルト設定のデフォルト値
関連していると、テーブルを設定します
to_fieldテーブルは、フィールドに関連して設けられました
関連するテーブルに関連付けられているデータの現在のテーブルの行が削除されon_delete行動
models.CASCADE
関連データを削除します
データベースのデフォルトの制約を作成するかどうかを真db_constraint
カスタムフィールド
フィールドタイプを定義する方法
class MyCharField(models.Field):
def __init__(self,max_length,*args,**kwargs):
self.max_length = max_length
# 重新调用父类的方法
super().__init__(max_length=max_length,*args,**kwargs)
def db_type(self,connection):
return 'char(%s)'%self.max_length
トランザクション操作ORM
どのような取引された
4つの特徴
ACIDbi
オペレーティングアトミックトランザクションはどちらか、分離やるかないことができない
一貫性のあるデータベースのトランザクションを別の一貫した状態にある一貫した状態から変更する必要があります(アトミック)と密接に関連する
隔離事の間に、他のトランザクションに干渉しない
提出されると、トランザクション持続性の、データの影響は永久的です
三つには、データベースの設計パラダイムフォーム
1.最初のパラダイム:
また(すなわち、確実にするために、行と列の表形式に編成することができ、任意のテーブルの行、即ち交差点が行または列の形で細胞に細分化されていない1NFがアプリケーション内のデータを指すが知られています各列の原子)リレーショナル・モデルは、基本的な操作の最小要件1nFの仕様の多くは、そうでなければ、リレーショナルスキーマ内に実装されないで満たします
2。第2のパラダイム:
また、2NF知られ、それは、1つのデータテーブル内の任意の非プライマリキーフィールドに基づい1NFを満たすことをいうまったく非プライマリキーなしの主キーフィールドに依存している一意の主キーフィールドを持つものを決定することができ、主キーフィールドの一部のみに依存そのようなだけの大学は、学生数以下に欠けているドアを結果成果であるが、結果のコース数の有意性を決定することができないかを判断することができ、主キーの学生数+コース番号などを記録
3.第3正規形
それはまた、既知の3NFは、データテーブル2NF関数従属性に基づい非プライマリキーフィールドとの間の、すなわち無依存性で非プライマリキーフィールドとの間に発生するいずれかを満たしていない、すべてのクラスのみ学生情報、クラス情報に依存してもよい意味します出会い3NFへの個別のストレージ
Djangoは総務を作成しました
from django.db import transaction
with transaction.atomic():
#在缩进中的代码中书写数据库代码
#该缩进中的所有代码都是一个事务
pass