參考:https://www.cnblogs.com/liwenzhou/p/8660826.htmlhtml
一 ORM單表操做數據庫
1 增刪改查
django
1 1. 查詢 2 1. 查全部 3 models.Publisher.objects.all() 4 2. 查某個具體的記錄 5 models.Publisher.objects.get(id=1) --> 注意查詢條件不成立就報錯 6 2. 刪除一條記錄 7 models.Publisher.objects.get(id=1).delete() 8 3. 建立一條記錄 9 models.Publisher.objects.create(name="新出版社名字", addr="出版社地址") 10 4. 修改一條記錄 11 obj = models.Publisher.objects.get(id=1) 12 obj.name = "新名字" 13 obj.save()
2 字段和參數:app
--1. 字段
1. CharField 字符類型,必須提供max_length
2. AutoField int自增
3. DateField 日期字段
4. DateTimeField() 日期時間字段
5. IntergeField() 整數類型
--2. 參數
1. null=True 能夠爲空
2. default=默認值
3. unique=True 表示是惟一的
--4. 時間字段
1. auto_now_add=True 建立數據記錄的時候會把當前時間添加到數據庫
2. auto_add=True 每次更新數據記錄的時候會更新該字段。spa
3 ORM必知必會單表查詢13條:code
1. all() --> 查詢全部結果 2. filter() --> 根據查詢條件查詢數據庫的 3. get() --> 獲取一個惟一的值 4. exclude() --> 將符合條件的都剔除掉,留下不符合條件的 5. values('字段名', ...) --> 返回一個QuerySet,裏面是字典 6. values_list(字段名', ...) --> 返回一個QuerySet,裏面是元祖 7. order_by() --> 對查詢結果排序 8. reverse() --> 對一個有序的查詢結果集作反轉 9. distinct() --> 去重,跨表查詢時去掉重複的記錄,MySQL不支持按字段去重 10. count() --> 返回數據條數 11. first() --> 取第一個數據 12. last() --> 取最後一條數據 13. exists() --> 判斷表裏有沒有數據
分類:
1. 返回QuerySet列表的有哪一些?
1. all()
2. filter()
3. exclude()
4. order_by()
5. reverse()
6. distinct()
7. values('字段名', ...) --> 查詢結果的列表裏,都是字典
8. values_list(字段名', ...) --> 查詢結果的列表裏,都是元祖
2. 返回具體對象的
1. first()
2. last()
3. get()
3. 返回數字的
1. count()
4. 返回布爾值
1. exists()htm
4 單表查詢雙下劃線操做對象
例子:blog
1 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 獲取id大於1 且 小於10的值 2 3 models.Tb1.objects.filter(id__in=[11, 22, 33]) # 獲取id等於十一、2二、33的數據 4 models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in 5 6 models.Tb1.objects.filter(name__contains="ven") # 獲取name字段包含"ven"的 7 models.Tb1.objects.filter(name__icontains="ven") # icontains大小寫不敏感 8 9 models.Tb1.objects.filter(id__range=[1, 3]) # id範圍是1到3的,等價於SQL的bettwen and 10 11 相似的還有:startswith,istartswith, endswith, iendswith 12 13 date字段還能夠: 14 models.Class.objects.filter(first_day__year=2017)
5 如何在一個py文件中 使用Django項目的相關配置或內容,好比之間鏈接djanjo裏面的數據庫,在新建的py文件裏面寫上下面這個便可:排序
import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") import django django.setup() from app01 import models
二 ORM跨表操做
1 外鍵 ForeignKey
經過Foreignkey字段 ,可以獲得和我關聯的那個對象
數據庫中保存的字段名是 外鍵字段_id
例子:書名關聯出版社
1 class Book(models.Model): 2 title = models.CharField(max_length=32) 3 publisher = models.ForeignKey(to="Publisher", on_delete=models.CASCADE)
on_delete=models.CASCADE的意思是當主表刪除數據以後,從表也跟着刪除
2 外鍵增刪改查操做
詳情見練習和做業
3 跨表查詢:
正向查詢:
# 查詢第一本書關聯的出版社的名字 # 1. 基於對象的查詢 # book_obj = models.Book.objects.first() # ret = book_obj.publisher.name # print(ret) # 2. 基於queryset的雙下劃線查詢,雙下劃線表示跨表 # ret = models.Book.objects.all().values_list("publisher__name").distinct() # print(ret)
# 反向查詢
# 由出版社反向查找書籍 publisher_obj=models.Publisher.objects.get(id=2) books=publisher_obj.book_set.all() title=books.values_list("title","id") print(title) # 2. 基於queryset的雙下劃線 # 江出版社出版的全部書籍的書名 ret = models.Publisher.objects.filter(id=2).values_list("book__title","book__id") print(ret)