最全得django講解,零基礎從入門到精通 (No.3---與資料庫互動)
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理
以下文章來源於騰訊雲 作者:Python進階者
( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )
一、前言
之前我們學到了模型的概念,提到了關聯關係以及一些欄位,現在我們來對這些知識進行擴充並且應用,那麼就需要與資料庫進行互動才能實現了。
二、與資料庫建立連線
前面我們講過django的模型和關聯關係後,我們來試著操縱下資料庫,首先我們需要在django中配置資料庫,進入settings.py檔案中,如下:
這裡我們可以設定四種資料庫型別,如下:
'django.db.backends.postgresql' 'django.db.backends.mysql' 'django.db.backends.sqlite3' 'django.db.backends.oracle'
除此之外,databases還有其它的內部選項,如下:
ATOMIC_REQUESTS:為True時資料庫事務包裝每個檢視,預設為False AUTOCOMMIT:為False時禁用Django事務管理,預設為True HOST:指定連線的主機名或ip地址,如果使用(‘/’)正斜槓開頭則通過套接字連線 CONN_MAX_AGE:資料庫連線的生命週期,預設為0請求結束時關閉資料庫,設定為None無限持久連線 OPTIONS:連結到資料庫時使用的額外引數,可用引數因資料庫型別而異。 'OPTIONS':{'read_default_file':'add/my.conf',} #優先於NAME,USER,PASSWORD,HOST,PORT #設定mysql啟用嚴格模式 'OPTIONS':{'init_command':"SET sql_mode='STRICT_TRANS_TABLES'"} PASSWORD:設定密碼,不與SQLite一起使用 PORT:指定埠 TIME_ZONE:設定時區 DISABLE_SERVER_SIDE_CURSORS:True時禁用伺服器端遊標 USER:連結使用者名稱 TEST:測試資料庫
如果我們想配置一個MySQL資料庫,如下:
‘db1’:{ ‘ENGINE’: ‘django.db.backends.mysql’, ‘NAME’: ‘db1’, ‘USER’: ‘root’, ‘PASSWORD’: ‘123456’, ‘HOST’: ‘127.0.0.1’, ‘PORT’: ‘3306’, ‘OPTIONS’: { ‘init_command’: “SET sql_mode=‘STRICT_TRANS_TABLES’”, }, #mysql使用嚴格模式,不指定會有警告資訊
配置好了之後,我們需要使用pymysql模組來使資料庫連線上,只需在該目錄的init.py檔案中新增如下程式碼即可:
import pymysql pymysql.install_as_MySQLdb()
下面分別是postgresql和oracle的配置方法,如下:
'db2':{ 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'db2', 'USER': 'xxxxxx', 'PASSWORD': 'xxxxx' } 'db3':{ 'ENGINE': 'django.db.backends.oracle', 'NAME': 'db3', 'USER': 'xxxxxxx', 'PASSWORD': 'xxxxxxx', 'HOST': '', 'PORT': '', }
三、生成遷移檔案
所有的配置設定好了之後,我們就可以通過遷移命令生成一個檔案,如下:
該檔案包含了我們建立的關係表的結構,它將應用同步到指定的資料庫中。
四、遷移資訊同步到資料庫
由於我們沒指定,因此會儲存到預設的sqlite3資料庫中,如果想把它儲存到MySQL資料庫中,很簡單,如下:
python manage.py migrate --database=db1
直接指定資料庫即可。
五、匯出資料
如果我們要匯出資料庫的內容也很簡單,如下:
python manage.py dumpdata he >1.json #儲存單個數據庫的資料 python manage.py dumpdata auth >1.json#儲存所有資料庫的資料
六、匯入資料
有匯出勢必有匯入,如下:
python manage.py loaddata app1_fixture.json --database=db1
接下來我們將這些資訊儲存到資料庫中,如圖:
這樣就把我們剛剛配置好的關聯表的資訊輸入到了sqlite3資料庫中去了,這個時候我們可以對模型中的類進行操作了。
七、操作資料庫
我們可以在cmd視窗中來實現資料庫的基本操作,如圖:
如果你不習慣在cmd中操作,也可以把程式碼寫在app的views.py檔案中,如下:
然後把這個檢視函式新增到urls.py檔案中,如圖:
可以看到,我們已經輸出了結果,只是目前我們沒有往資料庫中插入任何資料,因此沒有任何值。首先我們來看看我們編寫的資料模型類,如下:
from django.db import models from django.utils import timezone # Create your models here. class book(models.Model): id=models.AutoField(primary_key=True) book_name=models.CharField(max_length=30) book_price=models.IntegerField() class title(models.Model): start=models.DateTimeField(default=timezone.now) end=models.DateTimeField(auto_now=True) bk=models.ForeignKey(book,on_delete=models.CASCADE) class people(models.Model): article=models.CharField(max_length=20) age=models.IntegerField() p=models.ManyToManyField(book) t=models.OneToOneField(title,on_delete=models.CASCADE)
可以看到,我們這裡設定了多種關聯關係,比如一對多,多對多,一對一,這樣可以更方便大家理解。
1.增加
如果我們要進行資料庫的增加操作,我們需要先行建立一個類物件,也就是我們的模型,這裡有四種方法可選,如下:
1.book.objects.create(book_name='fds',book_price=43) 2.b=book(book_name='fds',book_price=43) b.save()#儲存 3.b=book(book_name='fds') b.book_price=43 b.save() 4.book.objects.get_or_create(book_name='fds',book_price=43)防止重複
2.查詢
有了物件後我們就需要獲取這些物件的值了,如下:
1.book.objects.all() 2.book.objects.all()[:3] #獲取3本書的資訊,不支援負索引,可以節約記憶體 book.objects.all().reverse()[:2] #最後兩本書 3.book.objects.get(book_name='西遊記')#獲取書名為西遊記的資訊 4.book.objects.filter(book_name='紅樓夢')##過濾書名為西遊記的資訊 book.objects.filter(id__lt=6,id__gt=1)#獲取id大於1且小於6的值 book.objects.filter(id__in=[1,2,3]) #獲取id等於1,2,3的資料 book.objects.filter(id__range=[1,5]) #獲取id為1~5之間的資料 book.objects.filter(book_name__icontains='aaa')#包含aaa,且aaa不區分大小寫 book.objects.filter(book_name__iexact='aaa')#為aaa,但是不區分大小寫 5.book.objects.exclude(book_name='水滸傳')#去除書名為西遊記的其它資訊
3.刪除
刪除操作非常簡便,只需要我們先選好物件,然後進行刪除即可,如下:
book.objects.filter(book_name='水滸傳').delete()
4.更新
和刪除操作一樣簡便,如下:
book.objects.filter(book_name='紅樓夢').update(book_price=100)
也可以通過get函式獲取指定條件的物件然後修改單條資料,如下:
b=book.objects.get(book_name='紅樓夢') b.book_price=299 b.save()
這樣做的好處是更加靈活。如圖:
5.獲取個數和對應的值
如果我們想獲取某個滿足條件的物件的個數或者值的話,很簡單,如下:
book.objects.filter(book_name='紅樓夢').count()#個數 book.objects.filter(book_price=321).values('id') #id的值
6.排序分組
有時候我們需要給資料進行排序後再輸出,這裡使用一個函式即可搞定,如下:
book.objects.filter(book_name='紅樓夢').order_by('id') #升序排序 book.objects.filter(book_name='紅樓夢').order_by('-id') #降序排序
如果我們想把結果進行分組,也是一個函式就搞定,如下:
book.objects.filter(book_name='水滸傳').values("id").annotate(book_price=Cou nt('id'))
7.去重
如果多個查詢資料合併到一起,則有可能會出現重複現象,因此需要去重,如下:
b1=book.objects.filter(id__lt=6,id__gt=1)#獲取id大於1且小於6的值 b2=book.objects.filter(id__in=[1,2,3]) #獲取id等於1,2,3的資料 b3=book.objects.filter(id__range=[1,5]) #獲取id為1~5之間的資料 b4=b1 | b2 | b3 b4.distinct()
這樣即可去重。如圖:
八、總結
以上就是django操作資料庫的最常用到的函式以及功能了,把這些學會了基本上你就能開發一個簡易的小部落格網站了。