数据库操作
配置
-
安装驱动程序------
pip install pymysql
-
在同名子目录的
__init__.py
文件中添加下列语句from pymysql import install_as_MySQLdb install_as_MySQLdb()
其作用是让Django的ORM能以mysqldb的方式调用PyMySQL
-
修改配置文件
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'root', # 数据库用户名 'PASSWORD': '******', # 数据库用户密码 'NAME': 'two_demo' # 数据库名字 } }
-
在mysql中创建同名数据库
create database two_demo default charset=utf8;
模型定义
-
数据库表名-------默认为**
子应用名称小写_模型类名小写
**;可以通过db_table来自主指明数据库名称 -
主键: django会为表创建自动增长的主键列,每个模型只能有一个主键列,若自主设置主键,则不会再创建自动增长的主键列,默认主键的属性为id,可以使用pk来替代
-
字段属性
类型 说明 AutoField 自动增长的IntegerField,通常不用指定,会自动创建自增长的属性 BooleanField 布尔类型,True和False NullBooleanField 支持Null、True、False三种数据类型 CharField 字符串,参数max_length表示最大字符个数 TextField 大文本字段,一般超过4000个字符时使用 IntegerField 整数 DecimalField 十进制浮点数,参数max_digits表示总位数,参数decimal_places表示小数位,通常用于存储金额 FloatField 浮点数 DateField 日期,有两个参数auto_now_add和auto_now_add;其中auto_now_add默认值为false,设为true时,能在保存该字段时,将其值设置为当前时间,并且每次改动,都会自动更新;而auto_now_add默认值也为false,设置为true时,会在model对第一次被创建时,将其字段的值设为创建时间,以后修改对象时,字段的值不会再更新.注意两个不能组合使用,会相互排斥 TimeField 时间,参数同DateField DateTimeField 日期时间,参数同DateField FileField 上传文件字段 ImageField 继承于FileField,对上传的内容进行校验,确保是有效的图片 -
外键
设置外键时,需要通过**
on_delete
**选项指明主表删除数据是,对于外键引用表数据如何处理,有以下可选常量:- CASCADE--------级联,删除主表数据时联通一起删除从表中的数据
- PROTECT----------保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
- SET_NULL-------设置为NULL,仅在该字段null=True允许为null是可用
- SET_DEFAULT------设置为默认值,仅在该字段设置了默认值时可用
- SET()--------设置为特定值或者调用特定方法
迁移
-
生成迁移文件
python manage.py makemigrations
-
同步到数据库中
python manage.py migrate
数据库----增加
-
save()
def create_book(request): # 第一种创建方式 book = BookInfo() book.bname = "西游记" book.bdate = "1980-01-01" book.bcomment = 500 book.breaded = 10000 book.save()
-
create()
BookInfo.objects.create( bname="东游记", bdate="1980-05-03", bcomment=500, breaded=5000 )
数据库----删除
-
模型类对象.delete()
def delete_hero(request): # 第一种删除方式 # hero = HeroInfo.objects.filter(hname="孙悟空").first() # hero.delete()
-
模型类.objects.filter().delete()
# 第二种 HeroInfo.objects.filter(hname="袁紫衣").delete()