天天看點

Django中對于資料庫的操作

作者:會測試的鲸魚

Django在作為一個開發架構,肯定會需要和資料庫關聯。我們以前學python基礎的時候,肯定了解過python的pymysql,可以連接配接mysql資料庫,并進行一些操作。但是Django提供了一套更簡單的架構用于操作資料庫,那就是ORM架構。

ORM内部其實也是封裝了pymysql類似的東西,隻不過ORM讓你操作資料庫的過程更簡單,不用再寫sql語句。

ORM環境配置

以前早一些的django版本ORM其實就是使用pymysql,是以就需要安裝pymysql:

pip install pymysql           

也可以到settings.py的同級目錄中的init.py引入子產品并進行配置:

import pymysql
pymysql.install_as_MySQLdb()           

如果使用的django版本比較新,就需要安裝mysqlclient:

pip install mysqlclient           

準備資料庫

這裡需要提一下,ORM無法幫你建立資料庫,這個資料庫還是需要收到去進行建立。

資料庫可以用虛拟機或者雲服務:

Django中對于資料庫的操作

建立資料庫

連接配接資料庫

到settings.py中找DATABASES,然後根據你使用的資料庫進行配置,預設其實有一個檔案資料庫的配置:

Django中對于資料庫的操作

預設的資料庫配置

這裡使用mysql,可以這樣寫:

Django中對于資料庫的操作

配置資料庫

操作表結構

以前要在資料庫中建表,或者修改表結構,都需要寫sql語句,這裡使用ORM,就不需要再寫sql語句了,直接建立與期望表結構對應的類就行,這個類需要繼承繼承models.Model,像這樣:

Django中對于資料庫的操作

models.py

類寫好了當然不會自動去資料庫中建立,需要再執行兩個指令:

python manage.py makemigrations
python manage.py migrate           

執行效果:

Django中對于資料庫的操作

生成表結構

可以從執行日志中看到生成的表不僅僅隻有前面建立的UserInfo類。到資料庫中檢視:

Django中對于資料庫的操作

生成的資料表

這是因為django預設有很多app,可以在settings.py中看到:

Django中對于資料庫的操作

django中的app

這些app都會産生一些資料表。這裡提醒一下,如果app沒有在settings.py中注冊,在執行上面兩個指令的時候,是不會生成、更新資料庫表結構的。

可以看到UserInfo類對應的表結構:

Django中對于資料庫的操作

app01_userinfo表結構

如果要修改表結構,隻需要修改UserInfo類的屬性,例如增加一個字段:

Django中對于資料庫的操作

增加字段

執行指令:

Django中對于資料庫的操作

python manage.py makemigrations

執行過程會詢問原資料在增加這個字段後要怎麼處理。第一種選擇是設定一個預設值,第二種選擇是停止目前指令執行,人為到models.py中設定一個預設值。

在models.py中設定預設值可以這樣操作:

Django中對于資料庫的操作

設定預設值

當然,你也可以允許為空,或者将預設值設定成None或者空字元串,都是允許的。設定成允許為空、為null的參數如下:

Django中對于資料庫的操作

允空、允null

再次執行指令,不會再有提示:

Django中對于資料庫的操作

更新資料庫表結構

更新結果:

Django中對于資料庫的操作

更新後的表結構

要删除某一個字段,也是一樣的操作,直接在類中删除對應字段,在執行指令就行。需要注意的一點是,删除某一個字段後,再次恢複這個字段,該字段對應的資料是不會恢複的。

操作資料-新增

需要對表裡的資料進行操作,也非常簡單。先準備一個繼承Model的類:

Django中對于資料庫的操作

繼承Model的類

需要在Department類對應的表中新增資料時,可以直接這樣調用:

Django中對于資料庫的操作

新增資料

當然也不能忘記配置對應的路由。運作起來後,調用這個接口後,就會在表中多一條資料:

Django中對于資料庫的操作

新增的資料

新增的調用方法都是這樣的方式:

類名.objects.create(字段名=value)           

操作資料-删除

如果要删除的話,可以這樣寫:

Django中對于資料庫的操作

删除指定資料

其中filter方法的作用是按照特定條件進行過濾。

如果要删除某一個表的所有資料,可以使用all方法,像這樣:

Django中對于資料庫的操作

删除表中所有資料

操作資料-查詢

實際工作中查詢其實是比較頻繁的,像前面使用的all方法,其實就是查詢目前表的所有資料,這樣改一下:

Django中對于資料庫的操作

查詢表中所有資料

請求後擷取的内容是這樣的:

Django中對于資料庫的操作

查詢結果

all方法傳回的其實是QuerySet類型的對象。

可以這樣改一下:

Django中對于資料庫的操作

調整傳回的資料

實際生産中,一般是不會将資料庫查詢内容直接傳回給用戶端的,都是會做一些調整處理的。

再次調用,結果:

Django中對于資料庫的操作

調用擷取到清單

當需要根據如此做更精細的查詢時,可以這樣改

Django中對于資料庫的操作

根據入參進行查詢

也許有同學會有想,都已經根據很精确的條件進行查詢了,為什麼還要傳回一個清單。當你明确某個條件隻會查詢出一個資料時,可以使用first方法,當然建議對查詢結果進行判斷:

Django中對于資料庫的操作

精确查詢

操作資料-更新

在掌握了前面查詢方法後,更新其實就非常簡單了,通過update方法就可以完成,像這樣:

Django中對于資料庫的操作

更新資料

總結

Django的ORM值不值得學習和使用,這個是很多初學者會考慮的事,其實我感覺沒有必要,django會吸收orm,肯定是經過考慮的,用不着強調sql的實用性和某些人寫sql的經驗、能力。這裡也隻是介紹了一些基礎操作,orm的功能其實也很豐富,基本上sql能做到的事情,orm都能做到。

學習ORM對于有志成為一名curd工程師的同學來說,還是挺有意義的。