python測試開發django(9)--模型models詳解
前言
Django模型是與資料庫相關的,與資料庫相關的程式碼一般寫在models.py中,Django支援sqlite3,MySQL,PostgreSQL等資料庫
只需要在settings.py中配置即可,不用更改models.py中的程式碼。當我們的web專案需要新增一張表和欄位內容時,需要在models.py裡面寫相關內容。
配置資料庫
django配置mysql資料庫教程參考前面一篇https://www.cnblogs.com/canglongdao/p/14095028.html
1.先安裝mysql資料庫驅動;
2.settings.py檔案中找到DATABASES配置項,設定連線mysql,賬號、密碼、域名、埠;
注意:django裡面無法建立資料庫,資料庫名稱django1(名稱可隨意命名)需要手動建立;
django裡面只能建立表名;
建立表
編輯models.py檔案,比如我想新增一張user表,有2個欄位:name、age。name是字串型別,age是int型別
希望建立的表和欄位效果設計如下(用navicat工具檢視的)
那麼對應models.py檔案程式碼為
#models.py from django.db import models # Create your models here. class User(models.Model): name=models.CharField(max_length=30) age=models.IntegerField()
接著開啟cmd,cd到django的根目錄,執行2個指令;
python manage.py makemigrations python manage.py migrate
makemigrations和migrate
makemigrations這一步執行後,會在當前app目錄下生成一個migrations資料夾,該資料夾的內容就是資料庫要執行的內容;
migrate就是執行之前生成的migrations檔案,這一步才是操作資料庫的一步,執行完成後,資料庫裡面會新增一張表xjyn_user
- 新建的表名是app名稱_class類名稱的組合,自動轉化成小寫,也就是xjyn_user
- name=models.CharField(max_length=30) 這個表示name欄位是字串型別(CharField),最大長度是30個字串。
- age=models.IntegerField() 這個表示age欄位是int型別(charField)
- id是預設的主鍵
欄位型別
django的models裡面欄位型別除了上面的常用的models.CharField 和models.IntegerField,還有更多的型別;
1.models.AutoField 自增列=int(11)
如果沒有的話,預設生成一個名稱為id的列,如果要顯示的自定義一個自增列,必須將列設定為主鍵primary_key=True。
2.models.CharField 字串欄位
必須max_length 引數
3.models.BooleanField 布林型別=tinyint(1)
不能為空,Blank=True
4.models.ComaSeparatedIntegerField 用逗號分割的數字=varchar
繼承CharField,所以必須max_length引數
5、models.DateField 日期型別 date
對於引數,auto_now =True則每次更新都會更新這個時間;auto_now_add 則只是第一次建立新增,之後的更新不再改變。
6、models.DateTimeField 日期型別 datetime
同DateField的引數
7、models.Decimal 十進位制小數型別= decimal
必須指定整數位max_digits和小數位decimal_places
8、models.EmailField 字串型別(正則表示式郵箱)=varchar
對字串進行正則表示式
9、models.FloatField 浮點型別= double
10、models.IntegerField 整形
11、models.BigIntegerField 長整形
integer_field_ranges ={
'SmallIntegerField'