首頁  >  文章  >  後端開發  >  django 常用orm操作實例介紹

django 常用orm操作實例介紹

巴扎黑
巴扎黑原創
2017-09-15 10:50:331658瀏覽

下面小編就為大家帶來一篇django 常用orm操作詳解。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧

Django流程:

1 建立Django專案: django-admin startproject projectname

#2 建立應用程式: :python manage.py startapp appname

3 在控制器(urls.py)建立url 與視圖函數的映射關係(一一對應)

#4 建立視圖函數,完成邏輯代碼

5 從資料庫取出集合物件

#5 把資料庫變數嵌入到模板進行渲染(render方法)

6 將渲染後的html頁面回傳給客戶端

URL:協定+網域+連接埠+路徑



#網域:www.cnblogs.com
連接埠:80
路徑:yuanchenqi/articles/6811632.html

資料:a=1

URL配置中的正規表示式匹配的是一個url的路徑部分

TEMPALTE(範本):HTML程式碼+邏輯控製程式碼

#邏輯控制語法: {{}} 渲染變數filter : {{var|方法:參數}}

##{% %} 渲染標籤
{% if %}
{% for %}
{% url %}
{% url %}

##自訂filter和simpletag:

(1)在app中建立templatetags模組(必須的)

#(2)建立任意.py 文件,如:my_tags.py

from django import template

register = template.Library()
@register.filter
def filter_multi(v1,v2):
return v1 * v2

#(3)建立任意.py 文件,如:my_tags.py

#在使用自訂simple_tag和filter的html 文件中匯入之前建立的my_tags.py :{% load my_tags %}

(4)使用simple_tag和filter:

{% load xxx %} #首行

# num=12
{ { num|filter_multi:2 }} #24

總結:

##filter:

只能接受一個參數,但可以用if等語句

simpletag:

能接受多個參數,但不可以用if等語句

ORM:

表之表之間的關係:

一對多外鍵欄位一定是在子表(一對多的多的表)中Foreign KEY

多對多在第三張表實現,透過兩個Foreign KEY

一對一在外鍵字段的基礎上增加唯一約束。

使用mysql方法

1更改setting檔案db配置

2更改__init__檔案中的驅動程式配置

ORM轉sql的配置

settings裡面配置loging

表.object.filter():得到的是一個集合物件例如[obj1,obj2]

表.object.get(): 得到的是一個model物件

一對多的新增記錄:

# 方法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") #多對多如果表在下方則需要加引號

多對多的新增

ManyToMany只有一種新增方式:

book.authors.add(*[author1 ,author2])

book.authors.remove(*[author1,author2])


注意:理解book_obj.publisher

#book_obj.authors

自建第三張表

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

#value的使用結果不是物件而是對象的某個欄位或屬性結果也為querySet

ret1=Book.objects.values('title')

ret1_list = Book.objects.values_list('title')

print('ret1 is : ',ret1) #結果是:ret1 is :
print(ret1_list) #結果為querySet裡的列表

修改操作update和save的區別:

update只是set指定的字段save set所有字段,所以update 效率更高

查詢:

擴充內容
# 查詢相關API:

# <1>filter(**kwargs): 它包含了與所給篩選條件相符的物件

# <2>all(): 查詢所有結果

# <3>get(**kwargs): 傳回與所給篩選條件相符的對象,傳回結果有且只有一個,如果符合篩選條件的物件超過一個或沒有都會拋出錯誤。

#-----------下面的方法都是再處理查詢的結果:例如objects.filter.values()--------

## <4>values(*field): 回傳一個ValueQuerySet-一個特殊的QuerySet,運行後得到的並不是一系列model的實例化對象,而是一個可迭代的字典序列

# <5>exclude(**kwargs): 它包含了與所給篩選條件不符的物件

# <6>order_by(*field): 對查詢結果排序

# <7>reverse(): 對查詢結果反向排序

# <8>distinct(): 從回傳結果中剔除重複紀錄

# <9> ;values_list(*field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列

# <10>count(): 返回資料庫中匹配查詢(QuerySet)的物件數量。

# <11>first(): 回傳第一筆記錄

# <12>last(): 傳回最後一筆記錄

# <13> exists(): 如果QuerySet包含數據,就傳回True,否則回傳False

以上是django 常用orm操作實例介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn