ホームページ  >  記事  >  バックエンド開発  >  Django での一般的な ORM 操作例の紹介

Django での一般的な ORM 操作例の紹介

巴扎黑
巴扎黑オリジナル
2017-09-15 10:50:331615ブラウズ

次のエディターでは、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:

パラメータは 1 つしか受け入れられませんが、if ステートメントや他のステートメントを使用できます

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)

#方法 2

p1=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 is : ',ret1) #結果は次のとおりです: ret1 is :

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。