[TIL] # 26 Django CRUD (1)
前回勉強したCreateに続きます.
Readを見に行きます
これは、今日学習するデータのユーザーに関する情報です.
getをご利用いただくと会員様のメールまたはIDをお持ちいたします
ユニークな値の取得
オブジェクトを持っているので、必要な情報があります.使用(dot)
すぐ持って来ればいいです.
倉庫から直接誤りを放つ.😖
異なる点がある場合、filterはクエリーセットを返します.
このクエリーセットでは、Pythonのリストと同様に動作します.
リストを使うように
リストのappend、popなど、リストのように使用できます.
Listメソッドの可用性はその順序と似ている
上はクエリーセットのメソッド、下はlistのメソッドです
for文でインポートできます
残りの除外項目をクエリーセットとしてインポート
残りを持ってきなさい.
メソッドが存在するかどうかを確認します.
True、Falseを返します
持ってきて、存在しないなら、作って持ってきてください.
存在する場合はFalse、存在しない場合はTrue
get or createの場合tupleに戻ります
テーブルに存在するクエリー、またはフィルタを使用してインポートされたクエリーセットの
戻り値
戻りint
最初のオブジェクトを返す
最後のオブジェクトを返します
ディクショナリ形式で返す
num emailはキー値に入り、「email」のすべてのユーザーの数は値に入ります.
集約の場合は、集約関数を使用して集約値の数を求めるために使用します.
https://docs.djangoproject.com/en/3.1/topics/db/aggregation/
例題が悪いので,本のコラムに総ページ数があれば
本の総ページ数またはAvgを使ってすべての本の平均ページ数に対して、
あるいはfilterが持ってきた本の平均値などを利用して...取得用
valuesはdictionaryを含むクエリーセットを返します
valuesリストの場合、tupleフォーマットを返します.
各columnはkeyで、dataはvalue値で、バイナリ形式で表示されます
ForeignKeyの使用
getの場合、データが必要になるたびにHit DBでデータを取得する
合計3つのデータベースHit
select relatedの場合はインポートされました.
データを1番Hitに持ち込む
ここでデータベースを非表示にすると、時間とメモリの損失を節約できます.
selectを使用してインポートする場合、select related
両者の順序は重要ではない.
ああ….つや消し
Readを見に行きます
これは、今日学習するデータのユーザーに関する情報です.
READ
get()
User.objects.get(id = 1)
User.objects.get(id = 1).email
User.objects.get(id = 1).password
オブジェクトを返す方法getをご利用いただくと会員様のメールまたはIDをお持ちいたします
ユニークな値の取得
オブジェクトを持っているので、必要な情報があります.使用(dot)
すぐ持って来ればいいです.
返されるオブジェクトが多い。
User.objects.get(id__gte = 1)
MultipleObjectsReturned 倉庫から直接誤りを放つ.😖
filter()
user1 = User.objects.filter(id = 1)
user1[0].email
user1[0].password
前に見たgetと何かに似ているところがあります.異なる点がある場合、filterはクエリーセットを返します.
このクエリーセットでは、Pythonのリストと同様に動作します.
リストを使うように
filterとlistの違い
リストのappend、popなど、リストのように使用できます.
Listメソッドの可用性はその順序と似ている
上はクエリーセットのメソッド、下はlistのメソッドです
クエリー・セットでは、負の値は使用できません。
複数のクエリー・セット
jungs = User.objects.filter(email__startswith = "jung")
google_users = User.objects.filter(email__endswith = "jung")
クエリーセットを使用して情報を取得する場合for文でインポートできます
exclude()
残りの除外項目をクエリーセットとしてインポート
フィルタと一緒に使用
users = User.objects.filter(email__endswith = "gmail.com").exclude(id =2)
このようにGoogleユーザーを使用するが、id=2のユーザーは含まれない.残りを持ってきなさい.
exists()
メソッドが存在するかどうかを確認します.
True、Falseを返します
get_or_create()
持ってきて、存在しないなら、作って持ってきてください.
存在する場合はFalse、存在しない場合はTrue
get or createの場合tupleに戻ります
count()
テーブルに存在するクエリー、またはフィルタを使用してインポートされたクエリーセットの
戻り値
戻りint
first()
最初のオブジェクトを返す
last()
最後のオブジェクトを返します
aggregate()
ディクショナリ形式で返す
num emailはキー値に入り、「email」のすべてのユーザーの数は値に入ります.
どこで使いますか。
集約の場合は、集約関数を使用して集約値の数を求めるために使用します.
https://docs.djangoproject.com/en/3.1/topics/db/aggregation/
例題が悪いので,本のコラムに総ページ数があれば
本の総ページ数またはAvgを使ってすべての本の平均ページ数に対して、
あるいはfilterが持ってきた本の平均値などを利用して...取得用
values(), values_list()
valuesはdictionaryを含むクエリーセットを返します
valuesリストの場合、tupleフォーマットを返します.
各columnはkeyで、dataはvalue値で、バイナリ形式で表示されます
select_related
ForeignKeyの使用
# get을 이용해서 가지고 올경우
post1 = Post.object.get(id = 1) # Hit
post1.user # Hit
post1.user.email # Hit
# select_related를 이용해서 가지고 올경우
post2 = Post.objects.select_related('user').get(id = 1) # Hit
post2.user
post2.user.email
# get을 이용한 쿼리문
print(Post.objects.filter(id = 1).query)
>>> SELECT `posts`.`id`, `posts`.`content`, `posts`.`user_id`, `posts`.`created`, `posts`.`updated` FROM `posts` WHERE `posts`.`id` = 1
print(Post.objects.select_related('user').filter(id = 1).query)
# select_related를 이용한 쿼리문
>> SELECT `posts`.`id`, `posts`.`content`, `posts`.`user_id`, `posts`.`created`, `posts`.`updated`, `users`.`id`, `users`.`email`, `users`.`password` FROM `posts` INNER JOIN `users` ON (`posts`.`user_id` = `users`.`id`) WHERE `posts`.`id` = 1
ForeignKeyを使用して参照する場合、getの場合、データが必要になるたびにHit DBでデータを取得する
合計3つのデータベースHit
select relatedの場合はインポートされました.
データを1番Hitに持ち込む
ここでデータベースを非表示にすると、時間とメモリの損失を節約できます.
selectを使用してインポートする場合、select related
両者の順序は重要ではない.
ああ….つや消し
Reference
この問題について([TIL] # 26 Django CRUD (1)), 我々は、より多くの情報をここで見つけました https://velog.io/@ddalkigum/TIL-25-1-Django-CRUD-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol