下面小編就為大家帶來一篇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
URL配置中的正規表示式匹配的是一個url的路徑部分
TEMPALTE(範本):HTML程式碼+邏輯控製程式碼#邏輯控制語法: {{}} 渲染變數filter : {{var|方法:參數}}##{% %} 渲染標籤
{% if %}
{% for %}
{% url %}
{% url %}
##自訂filter和simpletag:
(1)在app中建立templatetags模組(必須的)
#(2)建立任意.py 文件,如:my_tags.py
from django import templateregister = 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)authors=models.ManyToManyField("Author") #多對多如果表在下方則需要加引號
多對多的新增ManyToMany只有一種新增方式:
book.authors.add(*[author1 ,author2])
book.authors.remove(*[author1,author2])#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=models.Book2Author(author=author_obj ,Book_id=1)
s.save()
#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只是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中文網其他相關文章!