フィールドで使用されるモデル
AutoField(PRIMARY_KEY =真)プライマリキー(int型の自動インクリメント、何の自動インクリメントがない場合のモデルは、自動的にID列という名前の列を作成するとき。PRIMARY_KEY = Trueのパラメータを入力しなければなりません。)
CharFieldです(MAX_LENGTH = 32)、VARCHAR(32)
IntegerFieldと()int型
BigIntergerField()BIGINT
DecimalFieldは()小数
EmailField()VARCHAR(254)
DateField()日付
DateTimeField型()日時
auto_now:時間が自動的にフィールドを更新するたびに編集データ
auto_now_add:データの作成が自動的に更新されると
BooleanField(フィールド)
ブール値を渡すためのフィールドがデジタルにフィルムます0/1
is_delete
is_status
is_vip
テキストフィールド(フィールド)
- テキストの大部分を格納するためのテキストタイプ
FileFieldに(フィールド)
- 指定したディレクトリにデータベースに格納されている文字列パス、アップロードファイル、唯一のファイルパスを保ちます
upload_to =「ファイルのパスを指定します」
ファイルオブジェクトファイルにこのフィールド伝達経路が自動的にファイルフィールド保存しupload_to指定したフォルダに保存されます
char型のフィールドをカスタマイズする方法
django.db.models インポートフィールド、 クラス:RealCharField(フィールド) DEF __init__(セルフ、MAX_LENGTH、引数*、** :kwargsから) self.max_length = MAX_LENGTH #操作を完了した後、スーパーコール親クラスの親クラスを使用してインターセプトする方法方法 スーパー()。__init__(MAX_LENGTH = MAX_LENGTH、引数*、** kwargsから) DEFのDB_TYPE(セルフ、接続): リターン ' 文字(%S)'%のself.max_lengthの クラスムービー(models.Model): テキストフィールド = RealCharField( MAX_LENGTH = 64)
フィールド内の重要なパラメータ
ヌルヌル= Trueの場合、 フィールドが空であることができ、あなたはnullでなければなりません
デフォルトデフォルトパラメータ
ジャンゴ1.1は、デフォルトのカスケード削除カスケード更新を手動でdjango2.x指定する必要があります
on_delete = models.CASCADE
db_contraints =真
#Baiduの
選択パラメータ
セックスのユーザー
教育
結婚暦の
ジョブステータス
のお客様ソースは
、あなたのデータを一覧表示する際、完全にあなたは、パラメータの選択肢を使用することを検討することができますすることができます
models.py
クラスユーザー情報(models.Model): ユーザ名 = models.CharField(MAX_LENGTH = 32 ) GENDER_CHOICES = ( ( 1、。' M ' )、 ( 2、' F ' )、 ( 3、' その他' ) ) 性別 =モデル。 IntegerFieldと(選択肢= GENDER_CHOICES) #デジタルメモリのフィールドがと一致してもよく、または関係以外番号 record_choicesは=((「確認」、「でチェック」)、 (' 退去'、' 休暇' )、 (' NOSHOW '、' 不在' )、 (' leave_early '、' 早退' )、 ) 録音 = models.CharField(' クラス・レコード'、=選択をrecord_choicesは、デフォルト= ' 確認しました'、MAX_LENGTH = 64)
test.py
= models.Userinfo.objects.get USER_OBJ(PK = 1 ) 印刷(user_obj.username) 印刷(user_obj.gender) #フィールド値パラメータの選択肢についてはget_xxx_display() 印刷(user_obj.get_gender_display()) #ノーコメントについてデータ情報get_xxx_display()またはそれ自体が取得した数 USER_OBJ = models.Userinfo.objects.get(= PK。4 ) プリント(user_obj.gender) #100 プリント(user_obj.get_gender_display()) #100
設定するには、自動的に表示コマンドをDjangoのSQL
settings.pyファイルが追加します
LOGGING = { ' バージョン':1 、 ' disable_existing_loggers ' :Falseを、 ' ハンドラ' { ' コンソール' { ' レベル':' DEBUG ' 、 ' クラス':' logging.StreamHandler ' 、 }、 }、 ' ロガー' :{ ' django.db.backends ' : { "ハンドラ':[ ' コンソール' ]、 ' 伝搬' :真、 ' レベル':' DEBUG ' 、 } } }
データベースのクエリの最適化(インタビュー聞いてきます)
のみ与延期
唯一の役割
括弧で得られた結果は、フィールドだけにオブジェクトのデータ属性のセットのリストの括弧で指定されているフィールドで渡す
フィールド属性の物点がデータベースに行くつもりはないされていますが、非括弧内のフィールドを指す一度取ることができますデータ
が、現在は再取るデータベースクエリです
延期とだけ反対の
括弧内の結果は、フィールドの取得は、オブジェクト内のデータオブジェクトのセットのリストをフィールド属性に指定されていない場合はパスが括弧
目標点をフィールド属性データベースを複製していますが非括弧ではないなくなって、データベースにポイントフィールドを取る一度ますインクルード
#不活性クエリであるRES = models.Book.objects.all()#DjangoのORMクエリ #1 印刷(RES) #RES = models.Book.objects.values( 'タイトル') #1 印刷(RES) #R&LT RESにするため: #1 印刷(r.title) #RES = models.Book.objects.only( 'タイトル')#は、これらの特性のタイトル内のオブジェクト #1 #プリント(RES) # :におけるR&LT RESのための #1 #プリント(r.title) # 印刷(r.price)#内装が再反復して、価格のために見て 「」」 の役割のみ 括弧で得られた結果は、フィールドを渡すだけで、そのオブジェクトの中に括弧フィールドのプロパティでデータオブジェクトの設定された所定の入ったリストされた 対象不動産は、フィールドのポイントですデータベースになりませんが、あなたは非括弧内のフィールドを指したら、データを取得することができます が、データベースクエリにそれを再取るさ 。「」 " #をRES = models.Book.objects.defer(「タイトル」) #延期とのみ互いに反転関係 #R&LT RES内用: #1 印刷(r.title) 「」 " DEFERでのみコントラスト 括弧で得られた結果は、フィールドを送信されますデータのセットのリストは括弧フィールド属性に指定されていないオブジェクト内のオブジェクト のターゲットポイントは、フィールド属性データベースを複製しますが、あなたは、データベース内のフィールドのポイントを取るいったん非ブラケットは行くことはありません 。「」 "
selected_related与prefetch_related
selected_related
インテリアは今も、リンクされたすべてのテーブルの後のテーブルを操作して、オブジェクトに1回のパッケージをチェックアウトされた
プロパティが対象となったため、データベースは、パッケージ全体を歩くする必要がない場合任意のテーブルからデータを取得する際にデータオブジェクトの後に
select_relatedブラケットは、外部キーフィールドを送信し、多対多であり、1フィールドだけでなくでした
select_related(外部キーフィールド1__外部キーフィールド2__ ...外部キーフィールド。3)
prefetch_related
内部サブクエリをprefetch_relatedが、あなたもテーブルを操作する感じ
あなたがオブジェクトにカプセル化されたすべての外部キーのデータ・ページ管理テーブルでサブクエリ内の
テーブルの現在のテーブルまたは外部キーフィールドの後にポイントをターゲットもありませんあなたは、データベースを取る必要があります
長所と短所
一度だけでもSQLクエリを利用するテーブル操作をselect_related
時間のかかる10Sの接続テーブルでの動作消費を
prefetch_relatedサブクエリ二回のSQLクエリが行く
クエリの数に時間がかかり、1秒
#Select_relatedとprefetch_related #RES = models.Book.objects.get(= PK 1) #1 印刷(res.publish.name) #RES models.Book.objects.select_related =( '公開') #R&LT RESのために: # 印刷(r.publish.name) #の 印刷(r.publish.addr) 「」 " テーブル全体の動作について、さらに対象外の使い捨てパッケージのチェックにリンクされます後でさえも、内部テーブル の任意のデータオブジェクトテーブルを取得した後、データを歩くする必要がない場合、オブジェクトの属性としてデータベースにパッケージのすべての カッコ内はselect_related外部キーフィールドを渡すだけでなく、できは多対多であり、1つのフィールド select_related(外部キーフィールド1__外部キーフィールド2__ ...外部キーフィールド。3) "" " #prefetch_related #RES = models.Book.objects.prefetch_related() '公開' #の#印刷(RES) # #の場合、r内のRES: #の 印刷(r.publish.name) 「」 " prefetch_related内部サブクエリが、あなたの感じを与えることも、手術台の あなたに全体のパッケージにサブクエリのデータ・ページ管理テーブルの外部キーによって内部オブジェクト 現在のテーブル内のオブジェクトポイントの後やテーブルの外部キーフィールドは、データベースを実行する必要はありません 「」「 」「」 長所と短所は、 SQLクエリの後の利益のみに行くことさえ動作してテーブルをselect_related 操作は、接続内のテーブルがかかります10S prefetch_relatedサブクエリ二回のSQLクエリに行く 時間がかかり、問い合わせ1Sの数に 「「」
どのようにDjangoのORMオープントランザクション操作
トランザクションの4つの特性(ACID)
不可分性
一貫性
隔離
持久性
開始トランザクションを ロールバック コミット
コード:
#DjangoのORMオープントランザクション操作 から django.db 輸入取引 transaction.atomic()を持つ: #の同じトランザクションに属しているコードブロックで実行ORM文 パス #の取引のもう一方の端を実行するコードのブロック設定できる上にあるトランザクション関連Baiduの曹操の外観
MTVとMVCモデル
MTVとして知られているMTVジャンゴフレームワーク
M:モデル
T:テンプレート
V:ビュー
MVC
M:モデル
V:ビュー
C:コントローラコントローラ(経路配信urls.py)
自然:MTVは、MVCの本質であります
BMSライブラリ管理システム