django中orm的簡單操作

2022-07-03 03:09:11 字數 4303 閱讀 9876

from django.db import

models

#create your models here.

from django.db import

models

#create your models here.

class

author(models.model):

nid = models.autofield(primary_key=true)

name=models.charfield( max_length=32)

age=models.integerfield()

#與authordetail建立一對一的關係

authordetail=models.onetoonefield(to="

authordetail

",on_delete=models.cascade)

class

authordetail(models.model):

nid = models.autofield(primary_key=true)

birthday=models.datefield()

telephone=models.bigintegerfield()

addr=models.charfield( max_length=64)

class

publish(models.model):

nid = models.autofield(primary_key=true)

name=models.charfield( max_length=32)

city=models.charfield( max_length=32)

email=models.emailfield()

class

book(models.model):

nid = models.autofield(primary_key=true)

title = models.charfield( max_length=32)

publishdate=models.datefield()

price=models.decimalfield(max_digits=5,decimal_places=2)

#與publish建立一對多的關係,外來鍵字段建立在多的一方

publish=models.foreignkey(to="

publish

",to_field="

nid",on_delete=models.cascade)

#與author表建立多對多的關係,manytomanyfield可以建在兩個模型中的任意乙個,自動建立第三張表

######################基於物件查詢(子查詢)##############################

#按欄位(publish)

#一對多 book -----------------> publish

##book_set.all()

#正向查詢按欄位:

#查詢python這本書籍的出版社的郵箱

#python=models.book.objects.filter(title="python").first()

#print(python.publish.email)

#反向查詢按 表名小寫_set.all()

#蘋果出版社出版的書籍名稱

#publish_obj=models.publish.objects.filter(name="蘋果出版社").first()

#for obj in publish_obj.book_set.all():

#print(obj.title)

#按欄位(authors.all())

#多對多 book -----------------------> author

##book_set.all()

#查詢python作者的年齡

#python = models.book.objects.filter(title="python").first()

#for author in python.authors.all():

#print(author.name ,author.age)

#查詢alex出版過的書籍名稱

#alex=models.author.objects.filter(name="alex").first()

#for book in alex.book_set.all():

#print(book.title)

#按欄位 authordetail

#多對多 author -----------------------> authordetail

##按表名 author

#查詢alex的手機號

#alex=models.author.objects.filter(name='alex').first()

#print(alex.authordetail.telephone)

#查詢家在山東的作者名字

#ad_list=models.authordetail.objects.filter(addr="shandong")##

for ad in ad_list:

#print(ad.author.name)

'''對應sql:

select publish_id from book where title="python"

select email from publish where nid = 1

'''#

#####################基於queryset和__查詢(join查詢)############################

#正向查詢:按欄位 反向查詢:表名小寫

#查詢python這本書籍的出版社的郵箱

#ret=models.book.objects.filter(title="python").values("publish__email")

#print(ret.query)

'''select publish.email from book

left join publish on book.publish_id=publish.nid

where book.title="python"

'''#

蘋果出版社出版的書籍名稱

#方式1:

ret1=models.publish.objects.filter(name="

蘋果出版社

").values("

book__title")

print("

111111111====>

",ret1.query)

#方式2:

ret2=models.book.objects.filter(publish__name="

蘋果出版社

").values("

title")

print("

2222222222====>

", ret2.query)

#查詢alex的手機號

#方式1:

ret=models.author.objects.filter(name="

alex

").values("

authordetail__telephone")

#方式2:

models.authordetail.objects.filter(author__name="

alex

").values("

telephone")

#查詢手機號以151開頭的作者出版過的書籍名稱以及書籍對應的出版社名稱

django中ORM的事務操作

在django的orm中,有兩種使用事務的方式 注意,mysql需要是innodb引擎 from django.db import transaction transaction.atomic def viewfunc request 下面的 在乙個事務中執行,一但出現異常,整個函式中所有的資料庫操...

Django框架中ORM單錶操作

orm 物件關係對映 模式是一種為了解決物件導向與關聯式資料庫存在的互不匹配的現象的技術。首先,在model裡邊建立類 class usergroup models.model 部門 3 title models.charfield max length 32 class userinfo mode...

簡單示例實現django的orm

在django中如果我們定義了乙個user的model。就可以使用user.objects.create 等方法.那麼在django的原始碼中是如何實現這種寫法的呢?下面 從最外層簡單完成了django orm的呼叫方法實現.ps 下面的 只是實現了django的最外面呼叫實現而已.class ma...