次のエディターでは、Django で一般的に使用される ORM 操作について詳しく説明します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って見てみましょう
Django プロセス:
1 Django プロジェクトを作成します: django-admin startproject projectname
2 アプリケーションを作成します: : python manage.py startapp appname
3 コントローラー内(urls .py) URLとビュー関数のマッピング関係を作成(1対1対応)
4 ビュー関数を作成し、ロジックコードを完成させる
5 データベースからコレクションオブジェクトを取得する
5 埋め込むデータベース変数をレンダリング用のテンプレートに追加します (render メソッド)
6 レンダリングされた HTML ページをクライアントに返します
URL: プロトコル+ドメイン名+ポート+パス
プロトコル: http
ドメイン名: www.cnblogs. com
ポート:80
パス:yuanchenqi/articles/6811632 .html
データ:a=1
URL設定の正規表現はURLのパス部分と一致します
TEMPALTE(テンプレート):HTMLコード+ロジック制御コード
ロジック制御構文: {{}} レンダリング変数フィルター: {{var|method:parameter}}
{% %} レンダリング タグ
{% if %}
{% for %}
{% url % }
{% url %}
カスタム フィルターと simpletag:
(1) アプリで templatetags モジュールを作成します (必須)
(2) my_tags などの .py ファイルを作成します。 py
from django import template
register = template .Library()
@register.filter
def filter_multi(v1,v2):
return v1 * v2
(3) 次のような任意の .py ファイルを作成します。 # 1 行目# num=12
{{ num |filter_multi:2 }} #24概要:
filter:
simpletag :複数のパラメータを受け入れることができますが、使用することはできません
ORM などの If ステートメント:
テーブル間の関係:1 対多の外部キー フィールドはサブテーブル内に存在する必要があります (1 対多-to-many テーブル) 外部 KEY
の多対多 3 番目のテーブルは、2 つの外部 KEYを通じて 1 対 1 の外部キー フィールドに基づく一意制約を追加することによって実装されます。
mysqlメソッドを使用する
1 設定ファイルのDB構成を変更する2 __init__ファイル内のドライバー構成を変更するORMをSQL構成に変更する
ログイン設定を構成するTable.object.filter( ): 取得されるのは[obj1, obj2]のようなコレクションオブジェクトですTable.object.get(): 取得されるのはモデルオブジェクトです1対多のレコードの加算:
# 方法1 : # Book.objects.create(id=1,title="python",publication_date="2017-03-04",price=88.8,publisher_id=1)#方法 2p1=Publisher.objects .get(name "人民大学出版局")Book.objects.create(id=2,title="python",publication_date="2017-05-04",price=98.8,publisher=p1)
models.py ファイルauthors=models.ManyToManyField("Author") で多対多の関係を作成します #Many-to-many 以下の表の場合は、引用符を追加する必要があります
Many-to-多くの追加
ManyToMany の追加方法は 1 つだけです:
book.authors.add(*[author1,author2])book.authors.remove(*[author1,author2])
注: book_obj を理解してください。 Publisher
book_obj.authors
自作の 3 番目の Zhang テーブル
class Book2Author(models.Model):author=models.ForeignKey("Author")
Book= models.ForeignKey("Book")# それから別の方法もあります:
author_obj=models.Author .objects.filter(id=2)[0]book_obj =models.Book.objects.filter(id=3)[0]s=models.Book2Author .objects.create(author_id=1,Book_id=2)
s.save()s=models.Book2Author(author=author_obj,Book_id=1)
s.save()
.value と .value_list は、 book table book
#valueを使用した結果はオブジェクトではありませんが、結果もquerySet
ret1=Book.objects.values('title')
ret1_list = Bookです。 .objects.values_list('title')
print(ret1_list) # 結果は querySet
更新は指定されたフィールドを設定し、すべてのフィールドを保存するだけなので、更新の方が効率的です
Query:
拡張コンテンツ
# クエリ関連 API:
# <1>filter(**kwargs): 指定されたフィルター条件に一致するオブジェクトが含まれています
# <2>all(): すべての結果をクエリします
# <3>get(** kwargs): 戻り値指定されたフィルタリング条件に一致するオブジェクトが返される場合、返される結果が 1 つだけである場合、またはフィルタリング条件に一致するオブジェクトが 1 つも存在しない場合は、エラーがスローされます。
#----------次のメソッドはすべてクエリ結果を処理するためのものです。たとえば、objects.filter.values()----------
# <4> value(*field): ValueQuerySet (特別な QuerySet) を返します。実行後に得られるのは、一連のモデルでインスタンス化されたオブジェクトではなく、反復可能な辞書シーケンスです
# <5>exclude(**kwargs ): これには次のものが含まれます。指定されたフィルター条件に一致しないオブジェクト
# <6>order_by(*field): クエリ結果を並べ替えます
# <7>reverse(): クエリ結果を反転します
# <8>distinct( ): 返された結果から重複レコードを削除します
# <9>values_list(*field): これは、タプルのシーケンスを返し、values は辞書シーケンスを返します
# < ;10>count(): データベース内のクエリ (QuerySet) に一致するオブジェクトの数を返します。
# <11>first(): 最初のレコードを返します
# <12>last(): 最後のレコードを返します
# <13>exists(): QuerySet にデータが含まれている場合は True を返し、そうでない場合は True を返しますFalseを返す
以上がDjango での一般的な ORM 操作例の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。