DjangoのORMデータベーステーブルのクエリを構築するためのモデル

インポートモデルdjango.db
#ORMモデル:
#データベースの移行のmakemigrationsを移行する移行スクリプトを生成します

本クラス(models.Model):
ID = models.AutoField(PRIMARY_KEY = TRUE)#AutoFieldサブ成長、PRIMARY_KEY = Trueの主キー表す
名前= models.CharField(MAX_LENGTH = 200、ヌル=偽)#MAX_LENGTH = 200 最大長、ヌル= Falseのを空にすることはできませ
著者= models.CharField(MAX_LENGTH = 100、ヌル=偽)
。価格= models.FloatField(ヌル= Falseの場合、デフォルト= 0)= 0#デフォルトデフォルト値は0である
Shijian = models.DateTimeField(auto_now_add =真最初に自動的に現在の時刻を取得します#auto_now_add追加されたときに)時間を作成するために使用することができ
、現在のメソッドを保存するために、各コールを更新#のauto_nowまでの時間になるだろう、時間を変更するために使用することができます
(笑)= models.CharField(max_lengthを= 200、偽= nullで、フィールドのdb_column =「西渓」)
このパラメータフィールドのdb_column#は、データベースの固定フィールドの名前で、デフォルトの変数名が定義されて
dianhua = models.CharFieldを(max_lengthを= 11、ユニーク= TRUE)#ユニーク= Trueの説明このフィールドがありますのみ

デフ__str __(自己):返されるもの#印刷
復帰"<帳:({名前 。、{著者}、{価格}})>"の形式(名= self.name、著者= self.author、価格=自己.price)
クラスのメタ- :
DB_Tableの、=「テーブル」#固定データベーステーブル名の名前、名前が書かれていないアプリ_クラス名です
#は、名前フィールドでソート順序= [「フィールド名」、「フィールド名」]、あなたがより多くのことができます前回と同じでソート戻ってくる、スケジューリング


#外部キー:エフェクト効果の関係Xingbie xuesheng
クラスXingbie(models.Model):
名前= models.CharField(= 200はMAX_LENGTHです)

xueshengクラス(models.Model):
名前= models.CharField(MAX_LENGTH = 100)
xinbie models.ForeignKey =( "Xingbie"、on_delete = models.CASCADE、related_name = 'xueshnegmen')
#ForeignKey参照テーブル(参照テーブル、 on_delete削除参照処理分野は:models.CASCADE削除データを削除した後、削除をカスケードとして知られている)
アプリケーション内の#ビューは同じようxhesheng.xingbei =新北をバインドされている
xinbie1 = models.ForeignKey(「Xingbie」、 on_delete models.PROTECT =)
あなたのデータの他のアプリケーションがある場合は、あなたが保護され、削除することはできませんmodels.PROTECTテーブル:#は、参照処理のフィールドを削除
xinbie2 = models.ForeignKey(「Xingbie」、on_delete = models.SET_NULL)
を処理の参照は、フィールドを削除:参照フィールドはmodels.SET_NULL後に削除後に空ですが、テーブルのフィールドを空にすることができた場合にのみ
xinbie3 = models.ForeignKey(「Xingbie」、 on_delete = models.SET_DEFAULT、デフォルト= Xingbie.objects。 (PK = 2))GET
モデル:#リファレンス治療フィールドを削除します。SET_DEFAULTデータは、デフォルトの主キーとして、基準とデータのデフォルトの数を基準にした後に削除した後、IDデータである2
xinbie4 = models.ForeignKey( "Xingbie"は、 on_delete = models.SET(Xingbie.objects.get(PK = 2)))
models.SET()基準データの後に削除した後に関数を呼び出す:#削除参照処理場関数名であってもよいし、ノー()、デフォルト値として戻り値を取得
xinbie5 = models.ForeignKey(「Xingbie」、on_delete = models.DO_NOTHING)
が基準治療フィールドを削除:削除すべてをmodels.DO_NOTHING後に何もしませんデータベースレベルの制約を見て

#表関係
#1対多:
あなたが男性を照会したい場合#は、すべての学生のためである:
#xingbie = Xingbie.objects.get(名=「M」)
#Xingbie.xuesheng_set.all()あなたはそのすべてを得ることができるので、男の子データ
#あなたは=「xueshnegmmenに」のForeignKeyに属性名をrelated_nameを指定した場合、あなたは書くことができます
(#Xingbie.xueshnegmmen.allを)あなたはすべての男の子のためのデータを得ることができるので、

#あなたがのForeignKeyでrelated_nameを指定した場合=「xueshnegmmen」属性名
あなたはセベメソッドを呼び出すことはできませんが、それが唯一の従来の方法ので推奨され#新しいマルチテーブルデータ
#1 xingbie.xueshneg.add(xueshneg、バルク=偽 )


#-2-オン:.
Yiduiyi = models.OneToOneField( 'テーブル'、on_delete = models.CASCADE)

#3 -多くの:.
クラスのタグ(models.Model):
名前= models.CharField(MAX_LENGTH = 100)
duoduiduo = models.ManyToManyField( 'テーブル')

#お問い合わせ
#ビューSQL:XXX = Tag.objects.get(フィールド=値)または、XXX = Tag.objects.filter(フィールド__exact =値)しかできないクエリセットを印刷(xxx.query)
値がNone、対応データベースがnull
#contains:大文字と小文字を区別SQLクエリに対応するXXX = Tag.objects.filter(フィールド__contains =値)であるようなファジーバイナリ
#icontains:XXX = Tag.objects.filter(フィールド__icontains =値)大文字と小文字を区別しない対応するSQLクエリいるようファジー
#IN:XXX = Tag.objects.filterでSQL XXX(値1に相当する(=値1、値2、値3] __inフィールド)、値2、 。値3)
#gt:XXX = Tag.objects.filter(フィールド__gt =値)クエリフィールドは、データの値のクエリよりも大きい
#gte:XXX = Tag.objects.filter(フィールド__gte =値)未満またはフィールドを照会等しいですデータクエリ値
#lt:XXX = Tag.objects.filter(フィールド__gt =値)クエリフィールドは、データの値のクエリよりも大きい
#lte:XXX = Tag.objects.filter(フィールド__gte =値)クエリフィールドよりも大きいです値は、クエリデータに等しい
#startswith:XXX = Tag.objects.filter(フィールド__startswith =「XXX」)XXXを開始するすべての情報を照会し、大文字と小文字の区別
#istartswith:XXX = Tag.objects.filter(フィールド__istartswith = 'XXX')XXXを開始するすべての情報を照会し、大文字と小文字を区別しない
#endswith:XXX = Tag.objects.filter(フィールド__endswith = 'XXX' )すべての問い合わせに情報が終了、大文字と小文字を区別しますxxx
#iendswith:XXX = Tag.objects.filter(フィールド__iendswith =「XXX」)終わるすべての情報XXXをチェックアウトするには、大文字と小文字を区別しない
時間クエリ範囲、日付、yesr
日時日時#インポート時からは来る
時間目覚めdjango.utils.timezone輸入make_aware番号から
#start_time =日時(年= 2020、月= 1、= 4、時間= 15日、分= 0、第二=を0)
#end_time =日時(= 2020年、月= 1 ,. 4 =日、時間= 19、= 0分、SECOND = 0)
#start_time = make_aware(日時(= 2020年、月= 1 ,. 4 =日、 15 =時間、分= 0、SECOND = 0))
#end_time = make_aware(日時(= 2020年、月= 1 ,. 4 =日、時間= 19、= 0分、SECOND = 0))
#range命令:XXX = Tag.objects.filter(フィールド__range =(START_TIME、END_TIME))は、開始時刻と終了時刻との間のどこSQLに対応する時間データ終了する開始時刻を問い合わせ
#dateを:XXX = Tag.objects.filter (フィールド__date =日時(年= 2020、月= 1、日= 4)) データクエリ時間が時間ですが、あなたは、データベースの設定したいのか
、ダウンロードファイルの場所を:http://dev.masql.com/dpwnloads/timezones .htmlのtimezone_2018_posix.zpt -POSIX standarダウンロードファイルはmasql MySQLでデータ、データベースの再起動にコピーされ
#year:XXX = Tag.objects.filter(フィールド__year = 2020)クエリデータ2020と他のよりも大きいか又は等しくてもよいですフィールド= 2020 __year__gte:などの照会
など#monthと日と年
#week_day:XXX = Tag.objects.filter(フィールド__week_day = 4)データのクエリ週3、ルール1は、ジャンゴの代表である、日曜日2-6代わりに月曜日から金曜日まで
のデータクエリ時間#time#XXX = Tag.objects.filter(フィールド__time__range =(START_TIME、END_TIME)) 、データインベントリ秒小数

#isnull:XXX = Tag.objects.filter(フィールド_ _isnull =真)クエリデータフィールドが空のSQであります L:フィールドがnull
#isnull:XXX = Tag.objects.filter(フィールド__isnull =偽)クエリデータフィールドが空でない

正規表現のクエリは:
#regex:XXX = Tag.objects.filter(フィールド__regex = R「^式「)は、正規表現によれば、データベースを照会し、大文字と小文字が区別
#iregex:XXX = Tag.objects.filter(フィールド__iregex = R」^発現「)正規表現によれば、データベースを照会し、大文字と小文字を区別しません

おすすめ

転載: www.cnblogs.com/Mr-Simple001/p/12171864.html