Django数据库的简介及操作
ORM框架
O是object,也就类对象的意思,R是relation,翻译成中⽂是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进⾏了⼀个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有⼀个功能,它可以根据我们设计的类⾃动帮我们⽣成数据库中的表格,省去了我们⾃⼰建表的过程。
django中内嵌了ORM框架,不需要直接⾯向数据库编程,⽽是定义模型类,通过模型类和对象完成数据表的增删改查操作。
使⽤django进⾏数据库开发的步骤如下:
配置数据库连接信息
在models.py中定义模型类
迁移
通过类和对象完成数据增删改查操作
ORM作⽤
配置
在ttings.py中保存了数据库的连接配置信息,Django默认初始配置使⽤sqlite数据库。
1,使⽤MySQL数据库⾸先需要安装驱动程序
pip install PyMySQL
2,在Django的⼯程同名⼦⽬录的__init__.py⽂件中添加如下语句from pymysql import install_as_MySQLdb
install_as_MySQLdb()
作⽤是让Django的ORM能以mysqldb的⽅式来调⽤PyMySQL。3,修改DATABASES配置信息
DATABASES ={
'default':{
'ENGINE':'django.sql',
'HOST':'127.0.0.1',# 数据库主机
'PORT':3306,# 数据库端⼝
'USER':'root',# 数据库⽤户名
'PASSWORD':'mysql',# 数据库⽤户密码
'NAME':'django_demo'# 数据库名字
}
}
4,在MySQL中创建数据库
create databa django_demo default chart=utf8;
定义模型类
模型类被定义在"应⽤/models.py"⽂件中。
模型类必须继承⾃Model类,位于包dels中。
接下来⾸先以"图书-英雄"管理为例进⾏演⽰。
1 定义
创建应⽤booktest,在models.py ⽂件中定义模型类。
from django.db import models
#定义图书模型类BookInfo
class BookInfo(models.Model):
btitle = models.CharField(max_length=20, verbo_name='名称')
bpub_date = models.DateField(verbo_name='发布⽇期')
bread = models.IntegerField(default=0, verbo_name='阅读量')
bcomment = models.IntegerField(default=0, verbo_name='评论量')
is_delete = models.BooleanField(default=Fal, verbo_name='逻辑删除')
class Meta:
db_table ='tb_books'# 指明数据库表名
verbo_name ='图书'# 在admin站点中显⽰的名称陌上柔桑破嫩芽
verbo_name_plural = verbo_name # 显⽰的复数名称
def__str__(lf):
"""定义每个数据对象的显⽰信息"""
return lf.btitle
#定义英雄模型类HeroInfo
class HeroInfo(models.Model):
GENDER_CHOICES =(阅读倡议书
(0,'female'),
(1,'male')
)
hname = models.CharField(max_length=20, verbo_name='名称')
hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbo_name='性别')
hcomment = models.CharField(max_length=200, null=True, verbo_name='描述信息')
hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbo_name='图书')# 外键
is_delete = models.BooleanField(default=Fal, verbo_name='逻辑删除')
class Meta:东莞市社保查询
db_table ='tb_heros'
verbo_name ='英雄'
verbo_name_plural = verbo_name
def__str__(lf):
return lf.hname
1) 数据库表名
模型类如果未指明表名,Django默认以 ⼩写app应⽤名_⼩写模型类名 为数据库表名。
可通过db_table 指明数据库表名。
2) 关于主键
django会为表创建⾃动增长的主键列,每个模型只能有⼀个主键列,如果使⽤选项设置某属性为主键列后django不会再创建⾃动增长的主键列。
默认创建的主键列属性为id,可以使⽤pk代替,pk全拼为primary key。
3) 属性命名限制
不能是python的保留关键字。
不允许使⽤连续的下划线,这是由django的查询⽅式决定的。
定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
属性=models.字段类型(选项)
4)字段类型
类型 说明
AutoField ⾃动增长的IntegerField,通常不⽤指定,不指定时Django会⾃动创建属性名为id的⾃动增长属性
BooleanField 布尔字段,值为True或Fal
NullBooleanField ⽀持Null、True、Fal三种值
CharField 字符串,参数max_length表⽰最⼤字符个数
TextField ⼤⽂本字段,⼀般超过4000个字符时使⽤
IntegerField 整数
DecimalField ⼗进制浮点数, 参数max_digits表⽰总位数, 参数decimal_places表⽰⼩数位数
FloatField 浮点数
DateField ⽇期, 参数auto_now表⽰每次保存对象时,⾃动设置该字段为当前时间,⽤于"最后⼀次修改"的时间戳,它总是使⽤当前⽇期,默认为Fal; 参数auto_now_add表⽰当对象第⼀次被创建时⾃动设置当前时间,⽤于创建的时间戳,它总是使⽤当前⽇期,默认为Fal; 参数auto_now_add和auto_now是相互排斥的,组合将会发⽣错误
TimeField 时间,参数同DateField
DateTimeField ⽇期时间,参数同DateField
FileField 上传⽂件字段
ImageField 继承于FileField,对上传的内容进⾏校验,确保是有效的图⽚
婊是什么意思啊5) 选项
选项 说明
null 如果为True,表⽰允许为空,默认值是Fal
形容一个人
blank 如果为True,则该字段允许为空⽩,默认值是Fal
db_column 字段的名称,如果未指定,则使⽤属性的名称
db_index 若值为True, 则在表中会为此字段创建索引,默认值是Fal
default 默认
primary_key 若为True,则该字段会成为模型的主键字段,默认值是Fal,⼀般作为AutoField的选项使⽤
unique 如果为True, 这个字段在表中必须有唯⼀值,默认值是Fal
null是数据库范畴的概念,blank是表单验证范畴的
6) 外键
在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引⽤表数据如何处理,在dels中包含了可选常量:CASCADE 级联,删除主表数据时连通⼀起删除外键表中数据
PROTECT 保护,通过抛出ProtectedError异常,来阻⽌删除主表中被外键应⽤的数据
SET_NULL 设置为NULL,仅在该字段null=True允许为null时可⽤
SET_DEFAULT 设置为默认值,仅在该字段设置了默认值时可⽤
SET() 设置为特定值或者调⽤特定⽅法,如
f import ttings
ib.auth import get_ur_model
from django.db import models
def get_ntinel_ur():
return get_ur_model()._or_create(urname='deleted')[0]
class MyModel(models.Model):
ur = models.ForeignKey(
ttings.AUTH_USER_MODEL,
on_delete=models.SET(get_ntinel_ur),
)
DO_NOTHING 不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常
2 迁移
将模型类同步到数据库中。
1)⽣成迁移⽂件
海天一色的诗句
python manage.py makemigrations
2)同步到数据库中
python manage.py migrate
演⽰⼯具使⽤
1 shell⼯具
Django的manage⼯具提供了shell命令,帮助我们配置好当前⼯程的运⾏环境(如连接好数据库等),以便可以直接在终端中执⾏测试python语句。
通过如下命令进⼊shell
python manage.py shell
我们爱你啊中国
导⼊两个模型类,以便后续使⽤
dels import BookInfo, HeroInfo
2 查看MySQL数据库⽇志
查看mysql数据库⽇志可以查看对数据库的操作记录。 mysql⽇志⽂件默认没有产⽣,需要做如下配置:
我的高考sudo vi /etc/f.d/mysqldf
把68,69⾏前⾯的#去除,然后保存并使⽤如下命令重启mysql服务。
sudo rvice mysql restart
使⽤如下命令打开mysql⽇志⽂件。
tail -f /var/log/mysql/mysql.log # 可以实时查看数据库的⽇志内容
# 如提⽰需要sudo权限,执⾏
# sudo tail -f /var/log/mysql/mysql.log
数据库的增删改查
⼀, 增加
增加数据有两种⽅法。
1)save
通过创建模型类对象,执⾏对象的save()⽅法保存到数据库中。