1. 程式人生 > >Django入門教程(十一)資料庫ORM一對多

Django入門教程(十一)資料庫ORM一對多

Django 模型是與資料庫相關的,與資料庫相關的程式碼一般寫在 models.py 中,Django 支援 sqlite3, MySQL等資料庫,只需要在settings.py中配置即可,不用更改models.py中的程式碼,豐富的API極大的方便了使用。

Django框架的資料庫操作:這裡的資料庫操作並沒有採用原始的sql語句的形式,而是採用了orm技術實現資料的增刪改查。這裡的orm指的是物件關係對映(Object Relational Mapping),它是將表與表之間的關係對映為物件與物件之間的關係。在這裡操作物件就是在操作表。所有的增刪改查都是基於物件來完成的。通過這種方式操作資料庫,可以有效的防止sql語句注入的風險。

1、新建專案和應用 採用pycharm自帶的方式建立,一些相關配置已經幫我們配置好了。 2、編寫models.py檔案。 我們新建了一個Person類,繼承自models.Model, 一個人有姓名和身高。

class Person(models.Model):
    #primary_key=True表示一個table表的主鍵,既然pid這個欄位作為主鍵,那麼這個欄位預設帶有一些約束:非空、唯一、需要指定一個預設值。
    # AutoField()表示的是一個自動遞增的整數字段,一般用於表示主鍵。如果model中設定了主鍵,那麼表中就採用model設定的主鍵。如果model沒有設定主鍵,表會自動生成一個id主鍵。
    pid=models.AutoField(primary_key=True)

    # max_length()是CharField必須定義的欄位,用於設定字串的長度,一般範圍在0-255。根據內容長度的大小設定合適的max_length,主要是為了節省記憶體空間。
    # 缺少max_length就會報出CharFields must defined a 'max_length' attribute的錯誤。
    user_name=models.CharField(max_length=20)

    # null=True表示資料庫中的user_age欄位的值可以為空,預設值是False。
    #blank=True 表示html頁面中,在填寫這個欄位時是否必須填寫,True表示這個欄位的資料可以忽略不寫,False表示頁面中這個欄位的資料必須填寫。一般這個blank針對的是表單資料。
    user_height=models.IntegerField(null=True,blank=True)

在這裡插入圖片描述 3、建立資料庫表 這裡就需要用到兩個命令了。 (1)、python manage.py makemigrations 作用:收集models.py中發生變化的模型。執行完這個命令,如果出現No changes detected,說明django沒有檢測到當前model發生變化。 (2)、python manage.py migrate 作用:將model模型這些變化(增刪改查)同步至資料庫中,因為model對應的就是表和欄位,所以要是model發生變化,一定要同步至資料庫,保證model和資料庫內容一致。

①如果是pycharm中,點選下方的Terminal,然後執行第一個命令python

manage.py makemigrations(也可以使用cmd進入到當前專案所在專案根目錄下執行),此時表明已經收集到我們剛剛建立的這個model類了。 在這裡插入圖片描述 ②現在我們需要將其同步至資料庫中,執行python manage.py migrate命令。 在這裡插入圖片描述 ③檢視db.sqlite3,發現我們剛剛建立的person表已經存在了 在這裡插入圖片描述 其中的欄位也是我們定義的這3個欄位。 在這裡插入圖片描述 4、如此表就建立成功了,不過我們使用的是sqlite3資料庫,如果需要用到其他的資料庫,也是可以變更的。 進入settings.py檔案。 找到DATABASE,其預設配置如下 在這裡插入圖片描述 更改它為: 在這裡插入圖片描述 如此就能實現資料庫的變更。