提示:以下是本篇文章正文內容。
代碼如下:
form django.db import models
class Modelname(models.Model):
# 創建模型類並繼承models.Model
# 一個類就是數據庫的一張表
field1 = models.XXXfield(max_lenge=10,verbose_name='haha'
field = models.XXXfield()
class Meta():
# 為這個類定義一個說明
verbose_name = XXX
# 不加這個的話在我們的verbose_name在admin裡面會被自動加上s
verbose_name_plural = XXX
通常在我們的表裡面可以加一個add_time屬性,用來記錄這條記錄是什麼時候添加進的,
from datetime import datetime
class BaseModel(models.Model):
add_time = models.DateTimeField(default=datetime.now,verbose_name="添加時間"
class Meta:
# Django會幫我們創建這個表
abstract = True
class Course(BaseModel):
'''這裡寫屬性'''
'''外鍵'''
class Lesson(BaseModel):
course = models.ForeignKey(Course,on_delete=models.CASCADE)
'''這裡必須注意第一個參數是要關聯的外鍵,
第二個參數是一定要寫的,用來設置當Course被刪除的時候,
外鍵怎麼處理,CASCADE表示如果對應的課程被刪除,那麼外鍵的
記錄也會級聯的刪除,而一種SET_NULL屬性是指課程被刪除後
這個外鍵這一列被置空,它必須和```null = True,blank = True```
連用,否則都不能為空怎麼置空呢
Python、PHP、Java是一種開發語言,而MySQL、SQL Server則采用數據庫語言,不同語言之間如何實現互操作。
SQL語言包括包括數據定義語言DDL、數據控制語言DCL、數據查詢語言DQL、數據操作語言DML等,例如INSERT、DELETE、SELECT、UPDATE操作。
作為開發人員,應該把精力放在核心業務代碼的編寫上面,而不應該花太多精力跟數據庫語言打交道。
ORM(Object-Relational Mapping,對象關系映射)技術可以看做是開發者和數據庫之間的橋梁,用於實現數據庫和
編程語言之間的映射,本質上來看,ORM就是將SQL操作和編程語言操作做了一個翻譯。
通過ORM技術來操作數據庫,使得開發者無需接觸SQL語句,而直接操作對象的屬性和方法,大大提高了開發效率。
orm的功能
AutoField:一個自動遞增的整形字段,通常用於主鍵
CharField:字符串字段,用於輸入較短的字符,對應與HTML裡面<input type='text'>
TextField:文本字段,用於輸入較多的字符,對應html標簽 <input type = "textarea">;
EmailField:郵箱字段,用於輸入帶有Email格式的字符
DateFiled
TimeFiled
DateTimeField:日期字段,支持時間輸入
ImageField:用於上傳圖片並驗證圖片合法性,需定義upload_to參數,使用本字段需安裝python pillow等圖片庫
IntegerField:整數字段,用於保持整數信息
屬性
primary_key:設置True or False,定義此字段是否為主鍵
default:設置默認值,可以設置默認的文本、時間、圖片、時間等
null:設置True or False,是否允許數據庫字段為Null,默認為False
blank:設置True or False,定義是否運行用戶不輸入,默認為False;若為True,則用戶可以不輸入此字段
max_length:設置默認長度,一般在CharField、TextField、EmailField等文本字段設置
verbose_name:設置該字段的名稱,所有字段都可以設置,在Web頁面會顯示出來(例如將英文顯示為中文)
choices:設置該字段的可選值,本字段的值是一個二維元素的元祖;元素的第1個值為實際存儲的值,第2個值為HTML頁面顯示的值
upload_to:設置上傳路徑,ImageField和FileField字段需要設置此參數,如果路徑不存在,會自動創建
1. verbose_name:設置對象名稱(例如usecms),若沒有設置,則默認為該類名的小寫分詞形式,例如類名為CamelCase會被轉換為camel case;
2.verbose_name_plural:設置對象名稱復數(例如usercms),一般設置跟verbose_name一樣,verbose_name_plural=verbose_name否則會默認加s;
3. db_table:設置映射的數據表名,默認為“應用名_模型名”,即用該模型所在app的名稱加本模型類的名稱
4.proxy:設置True or False,設置本模型及所有繼承本模型的子模型是否為代理模型;
5. abstract:設置True or False,設置本模型類是否為抽象基類;如果是抽象基類,那麼是不會創建這張表的,這張表用來作為基類被其他的表繼承
modelname.object.all()取出所有的數據
modelname.object.get(pk=id)查詢出符合篩選條件數據(一條),如果查到多條或者沒有查到會報錯
modelname.object.filter(....)查詢出符合篩選條件的數據集(一條或者多條),如果對象不存在會返回一個空的列表,而不會報錯。
ModelName.Objects.exclude( )返會不符合篩選條件的數據集
代碼如下:
#常規的賦值增加
field1 = models.CharField()
field2 = modelsEmailField()
modelname.object.save()
#or 利用create方法
modelname.object.create(field1=models.CharField())
user_cms = UserCMS.objects.create(username=username, password=password)
在查詢的方法後面加上.delete()
代碼如下:
ModelName.Objects.all( ).order_by('xxx')
代碼如下:
#ModelName.Objects.all( ).order_by('xxx')[a:b]
all_interviews = Interview.objects.all().order_by('-read_counts')[:6]
recommended_interviews = Interview.objects.filter(company=recommended_tag).exclude(id=int(interview_id)).order_by('-read_counts')[:3]