Django ORM (二) 增加操作


數據庫表結構生成完畢后,可以使用工具連接上去

在 app01_author 表創建基礎記錄

在 app01_publisher 表創建基礎記錄

添加 data_oper 方法

在 urls.py 文件上添加

from app01 import views

urlpatterns = [
 ....
 path('data_oper/', views.data_oper),
]

ORM 增加方法

create 方式一

在 views.py 文件上添加

from django.shortcuts import render, HttpResponse
from app01 import models
from  app01.models import Book,Author

def data_oper(req):
    Book.objects.create(
        title="hahaha",
        price=2,
        publication_date="2019-05-16",
        publisher_id=1,
    )

    return HttpResponse("Hello world")

瀏覽器訪問 http://127.0.0.1:8000/data_oper/,成功生成一條記錄

create 方式二

在 views.py 文件上修改

from django.shortcuts import render, HttpResponse
from app01 import models
from  app01.models import Book,Author

def data_oper(req):
    dic = { "title":"K8S", "price":1, "publication_date":"2019-05-02", "publisher_id":1 }
    Book.objects.create(**dic)

    return HttpResponse("Hello world")

瀏覽器訪問 http://127.0.0.1:8000/data_oper/,生成一條記錄

save 方式一

from django.shortcuts import render, HttpResponse
from app01 import models
from  app01.models import Book,Author

# Create your views here.

def data_oper(req):
    obj=Book(
        title="Python",
        price=99,
        publication_date="2019-05-06",
        publisher_id=1,
    )
    obj.save()

    return HttpResponse("Hello world")

save 方式二

from django.shortcuts import render, HttpResponse
from app01 import models
from  app01.models import Book,Author

# Create your views here.

def data_oper(req):
    obj=Book()
    obj.title="GO"
    obj.price=90
    obj. publication_date="2019-05-06"
    obj.publisher_id=1
    obj.save()

    return HttpResponse("Hello world")

外鍵一對多的(ForeignKey)

在 models.py 中 Book 表下定義外鍵為
publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE)

方法一
在 views.py 文件上修改

from django.shortcuts import render, HttpResponse
from app01 import models
from  app01.models import Book,Author,Publisher

# Create your views here.

def data_oper(req):
    pub_obj = Publisher.objects.get(id=1)       # 取publish 表 id 為1 的值
    dic = {"title": "Docker", "price": 88, "publication_date": "2019-05-05", "publisher": pub_obj}
    Book.objects.create(**dic)

    return HttpResponse("Hello world")

方法二
在 views.py 文件上修改

from django.shortcuts import render, HttpResponse
from app01 import models
from  app01.models import Book,Author

def data_oper(req):
    dic = { "title":"K8S", "price":1, "publication_date":"2019-05-02", "publisher_id":1 }   # 直接指定 publisher 外鍵值了,這里要加 _id 
    Book.objects.create(**dic)

    return HttpResponse("Hello world")

外鍵多對多的情況

正向查詢

from django.shortcuts import render, HttpResponse
from app01 import models
from  app01.models import Book,Author,Publisher

# Create your views here.

def data_oper(req):
    book=models.Book.objects.filter(id=1)[0]
    authors=models.Author.objects.filter(id__gt=2)
    book.authors.add(*authors)

    return HttpResponse("Hello world")

反向查詢

from django.shortcuts import render, HttpResponse
from app01 import models
from  app01.models import Book,Author,Publisher

# Create your views here.

def data_oper(req):
    book = models.Book.objects.filter(id__gt=1)
    authors = models.Author.objects.filter(id=1)[0]
    authors.book_set.add(*book)

    return HttpResponse("Hello world")

雙下划線(__)之單表條件查詢

#    models.Book.objects.filter(id__lt=10,id__gt=1)   # 獲取id大於1 且 小於10的值
#
#    models.Book.objects.filter(id__in=[11, 22, 33])   # 獲取id等於11、22、33的數據
#    models.Book.objects.exclude(id__in=[11, 22, 33])  # not in
#
#    models.Book.objects.filter(title__contains="ven")
#    models.Book.objects.filter(title__icontains="ven") # icontains大小寫不敏感
#
#    models.Book.objects.filter(id__range=[1, 2])   # 范圍bettwen and


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM