2018-11-27 模型基礎

一、模型介紹

?1. 創(chuàng)建一個簡單的學生模型

class Student(models.Model):
    # 繼承models.Model
    # 定義數(shù)據(jù)字段
    name = models.CharField(max_length=10, unique=True)
    age = models.IntegerField(default=18)
    gender = models.BooleanField(default=1)
    # 創(chuàng)建數(shù)據(jù)時間,默認為當前時間: auto_now_add=True
    create_time = models.DateTimeField(auto_now_add=True, null=True)
    # auto_now : 修改時間, 每次修改學生信息時,修改該字段的時間為當前時間
    operate_time = models.DateTimeField(auto_now=True, null=True)

    class Meta:
        # 指定Student模型映射到數(shù)據(jù)庫中時,對應的表名。
        db_table = 'tb_student'

2. 配置數(shù)據(jù)庫

  • 2.1 在項目文件夾下的setting.py中修改數(shù)據(jù)庫類型和配置數(shù)據(jù)庫連接信息

??如:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dj7',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': 3306
    }
}

  • 2.2 其次需要在項目文件夾下的init.py中添加對應的數(shù)據(jù)庫驅動

mysql如下:

import pymysql (如果沒有pymysql的需要安裝pymysql第三方庫)
pymysql.install_as_MySQLdb()

?3. 注冊應用

  • 在項目文件下的setting.py文件中的INSTALLED_APPS最后添加應用名

??如:

INSTALLED_APPS = [
    這里省略部分默認代碼
    'app'
] 

?4. 生成遷移文件

格式: python manage.py makemigrations

  • 此時會在項目文件夾下的migration文件夾下創(chuàng)建一個遷移文件

如:0001_initial.py

?5. 制作遷移

格式: python manage.py migrate

此時在數(shù)據(jù)庫中就會創(chuàng)建一張與模型向對應的數(shù)據(jù)庫表(其中自動創(chuàng)建一個id字段并且自動增長和是主鍵)

二、更改啟動服務的ip和端口

格式:python manage.py runserver ip:port
或者
格式:python manage.py runserver port

?注意:后面參數(shù)可以是IP:port 或者 port,不能只是ip

三、Debug(程序調試)

    1. 在自己認為可能出現(xiàn)錯誤的地方添加斷點,再通過Debug對程序進行檢查調試
    1. python中可以通過debug控制臺打印程序運行值檢查是否出錯

四、通過ORM操作數(shù)據(jù)庫(CRUD操作)

?在上面創(chuàng)建的模型基礎上通過模型去更改操作數(shù)據(jù)庫表

?1. 配置url解析

# 需要先導入app應用下的views(視圖)
from app import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 新增數(shù)據(jù)
    # 配置url,并調用相應的視圖函數(shù)
    url(r'add_stu/', views.add_stu),
    # 刪除數(shù)據(jù)
    url(r'del_stu/', views.del_stu),
    # 修改數(shù)據(jù)
    url(r'^up_stu', views.up_stu),
] 

?2. 在應用(app)文件夾下views.py文件中定義與url相對應的視圖函數(shù)

# 引入Student模型
from app.models import Student

def add_stu(request):
    # 創(chuàng)建向數(shù)據(jù)庫student表中插入數(shù)據(jù)的函數(shù)
    # 添加數(shù)據(jù)
    # 方式一:
    # stu = Student()
    # stu.name = '小明'
    # 向數(shù)據(jù)庫中插入數(shù)據(jù)
    # stu.save()

    # 方式二:
    Student.objects.create(name='大錘11', age=19)
    # 返回響應
    return HttpResponse('添加成功!')


def del_stu(request):
    # 實現(xiàn)刪除數(shù)據(jù)操作
    # 1. 先查詢name=‘大錘’的信息
    Student.objects.filter(name='大錘11').delete()

    return HttpResponse('刪除成功!')


def up_stu(request):
    # 修改student表中的數(shù)據(jù)
    # 方式一:
    # stus = Student.objects.filter(name='小明')
    # 獲取小明對象
    # stu = stus[0]
    # stu.name = '大錘'
    # stu.save()
    # 方式二:
    # stu = Student.objects.filter(name='小明').first()
    # stu.name = '大錘'
    # stu.save()

    # 方式三:
    Student.objects.filter(name='小明').update(name='小明')

    return HttpResponse('修改成功!')

五、模型中定義的數(shù)據(jù)類型和數(shù)據(jù)庫(mysql)中的數(shù)據(jù)類型的關系

?5.1 定義模型

?? 1. 字段要求

字段名不能使python的保留字,否則會導致語法錯誤
字段名不能有多個連續(xù)下劃線,否則會影響ORM查詢操作

?5.2 模型中的數(shù)據(jù)類型

<center>模型字段類型</center>

字段類 說明
AutoField 自增ID字段
BigIntegerField 64位有符號整數(shù)
BinaryField 存儲二進制數(shù)據(jù)的字段,對應Python的bytes類型
BooleanField 存儲True或False
CharField 長度較小的字符串
DateField 存儲日期,有auto_now和auto_now_add屬性
DateTimeField 存儲日期和日期,兩個附加屬性同上
DecimalField 存儲固定精度小數(shù),有max_digits(有效位數(shù))和decimal_places(小數(shù)點后面)兩個必要的參數(shù)
DurationField 存儲時間跨度
EmailField 與CharField相同,可以用EmailValidator驗證
FileField 文件上傳字段
FloatField 存儲浮點數(shù)
ImageField 其他同F(xiàn)ileFiled,要驗證上傳的是不是有效圖像
IntegerField 存儲32位有符號整數(shù)。
GenericIPAddressField 存儲IPv4或IPv6地址
NullBooleanField 存儲True、False或null值
PositiveIntegerField 存儲無符號整數(shù)(只能存儲正數(shù))
SlugField 存儲slug(簡短標注)
SmallIntegerField 存儲16位有符號整數(shù)
TextField 存儲數(shù)據(jù)量較大的文本
TimeField 存儲時間
URLField 存儲URL的CharField
UUIDField 存儲全局唯一標識符

?常用的類型主要有以下幾類(自己總結的)

類型 說明
自增id字段 AutoField
數(shù)字類型 IntegerField、FloatField、DecimalField
字符串類型 CharField、TextField
時間類型 DateField、DateTimeField、TimeField
文件類型 FielField、ImageField
布爾和空 BooleanField、NullBoolField

<center>模型字段屬性</center>

選項 說明
null 數(shù)據(jù)庫中對應的字段是否允許為NULL,默認為False
blank 后臺模型管理驗證數(shù)據(jù)時,是否允許為NULL,默認為False
choices 設定字段的選項,各元組中的第一個值是設置在模型上的值,第二值是人類可讀的值
db_column 字段對應到數(shù)據(jù)庫表中的列名,未指定時直接使用字段的名稱
db_index 設置為True時將在該字段創(chuàng)建索引
db_tablespace 為有索引的字段設置使用的表空間,默認為DEFAULT_INDEX_TABLESPACE
default 字段的默認值
editable 字段在后臺模型管理或ModelForm中是否顯示,默認為True
error_messages 設定字段拋出異常時的默認消息的字典,其中的鍵包括null、blank、invalid、invalid_choice、unique和unique_for_date
help_text 表單小組件旁邊顯示的額外的幫助文本。
primary_key 將字段指定為模型的主鍵,未指定時會自動添加AutoField用于主鍵,只讀。
unique 設置為True時,表中字段的值必須是唯一的
verbose_name 字段在后臺模型管理顯示的名稱,未指定時使用字段的名稱

<center>模型元數(shù)據(jù)選項</center>

選項 說明
abstract 設置為True時模型是抽象父類
app_label 如果定義模型的應用不在INSTALLED_APPS中可以用該屬性指定
db_table 模型使用的數(shù)據(jù)表名稱
db_tablespace 模型使用的數(shù)據(jù)表空間
default_related_name 關聯(lián)對象回指這個模型時默認使用的名稱,默認為<model_name>_set
get_latest_by 模型中可排序字段的名稱。
managed 設置為True時,Django在遷移中創(chuàng)建數(shù)據(jù)表并在執(zhí)行flush管理命令時把表移除
order_with_respect_to 標記對象為可排序的
ordering 對象的默認排序
permissions 創(chuàng)建對象時寫入權限表的額外權限
default_permissions 默認為('add', 'change', 'delete')
unique_together 設定組合在一起時必須獨一無二的字段名
index_together 設定一起建立索引的多個字段名
verbose_name 為對象設定人類可讀的名稱
verbose_name_plural 設定對象的復數(shù)名稱
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容