Django数据库的简介及操作
ORM框架
O是object,也就类对象的意思,R是relation,翻译成中⽂是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。
在ORM框架中,它帮我们把类和数据表进⾏了⼀个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有⼀
个功能,它可以根据我们设计的类⾃动帮我们⽣成数据库中的表格,省去了我们⾃⼰建表的过程。
django中内嵌了ORM框架,不需要直接⾯向数据库编程,⽽是定义模型类,通过模型类和对象完成数据表的增删改查操作。
使⽤django进⾏数据库开发的步骤如下:
配置数据库连接信息
在中定义模型类
迁移
通过类和对象完成数据增删改查操作
ORM作⽤
配置
在中保存了数据库的连接配置信息,Django默认初始配置使⽤sqlite数据库。
1,使⽤MySQL数据库⾸先需要安装驱动程序
pipinstallPyMySQL
2,在Django的⼯程同名⼦⽬录的__init__.py⽂件中添加如下语句
frompymysqlimportinstall_as_MySQLdb
install_as_MySQLdb()
作⽤是让Django的ORM能以mysqldb的⽅式来调⽤PyMySQL。
3,修改DATABASES配置信息
DATABASES={
'default':{
'ENGINE':'',
'HOST':'127.0.0.1',#数据库主机
'PORT':3306,#数据库端⼝
'USER':'root',#数据库⽤户名
'PASSWORD':'mysql',#数据库⽤户密码
'NAME':'django_demo'#数据库名字
}
}
4,在MySQL中创建数据库
createdatabadjango_demodefaultchart=utf8;
定义模型类
模型类被定义在"应⽤/"⽂件中。
模型类必须继承⾃Model类,位于包中。
接下来⾸先以"图书-英雄"管理为例进⾏演⽰。
1定义
创建应⽤booktest,在⽂件中定义模型类。
rtmodels
#定义图书模型类BookInfo
classBookInfo():
btitle=eld(max_length=20,verbo_name='名称')
bpub_date=eld(verbo_name='发布⽇期')
bread=rField(default=0,verbo_name='阅读量')
bcomment=rField(default=0,verbo_name='评论量')
is_delete=nField(default=Fal,verbo_name='逻辑删除')
classMeta:
db_table='tb_books'#指明数据库表名
verbo_name='图书'#在admin站点中显⽰的名称
verbo_name_plural=verbo_name#显⽰的复数名称
def__str__(lf):
"""定义每个数据对象的显⽰信息"""
#定义英雄模型类HeroInfo
classHeroInfo():
GENDER_CHOICES=(
(0,'female'),
(1,'male')
)
hname=eld(max_length=20,verbo_name='名称')
hgender=ntegerField(choices=GENDER_CHOICES,default=0,verbo_name='性别')
hcomment=eld(max_length=200,null=True,verbo_name='描述信息')
hbook=nKey(BookInfo,on_delete=E,verbo_name='图书')#外键
is_delete=nField(default=Fal,verbo_name='逻辑删除')
classMeta:
db_table='tb_heros'
verbo_name='英雄'
verbo_name_plural=verbo_name
def__str__(lf):
1)数据库表名
模型类如果未指明表名,Django默认以⼩写app应⽤名_⼩写模型类名为数据库表名。
可通过db_table指明数据库表名。
2)关于主键
django会为表创建⾃动增长的主键列,每个模型只能有⼀个主键列,如果使⽤选项设置某属性为主键列后django不会再创建⾃动增长的主
键列。
默认创建的主键列属性为id,可以使⽤pk代替,pk全拼为primarykey。
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选项指明主表删除数据时,对于外键引⽤表数据如何处理,在中包含了可选常量:
CASCADE级联,删除主表数据时连通⼀起删除外键表中数据
PROTECT保护,通过抛出ProtectedError异常,来阻⽌删除主表中被外键应⽤的数据
SET_NULL设置为NULL,仅在该字段null=True允许为null时可⽤
SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可⽤
SET()设置为特定值或者调⽤特定⽅法,如
portttings
portget_ur_model
rtmodels
defget_ntinel_ur():
returnget_ur_model()._or_create(urname='deleted')[0]
classMyModel():
ur=nKey(
_USER_MODEL,
on_delete=(get_ntinel_ur),
)
DO_NOTHING不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常
2迁移
将模型类同步到数据库中。
1)⽣成迁移⽂件
migrations
2)同步到数据库中
ate
演⽰⼯具使⽤
1shell⼯具
Django的manage⼯具提供了shell命令,帮助我们配置好当前⼯程的运⾏环境(如连接好数据库等),以便可以直接在终端中执⾏测试
python语句。
通过如下命令进⼊shell
l
导⼊两个模型类,以便后续使⽤
importBookInfo,HeroInfo
2查看MySQL数据库⽇志
查看mysql数据库⽇志可以查看对数据库的操作记录。mysql⽇志⽂件默认没有产⽣,需要做如下配置:
sudovi/etc/mysql/.d/
把68,69⾏前⾯的#去除,然后保存并使⽤如下命令重启mysql服务。
sudorvicemysqlrestart
使⽤如下命令打开mysql⽇志⽂件。
tail-f/var/log/mysql/#可以实时查看数据库的⽇志内容
#如提⽰需要sudo权限,执⾏
#sudotail-f/var/log/mysql/
数据库的增删改查
⼀,增加
增加数据有两种⽅法。
1)save
通过创建模型类对象,执⾏对象的save()⽅法保存到数据库中。
>>>fromdatetimeimportdate
>>>book=BookInfo(
btitle='西游记',
bpub_date=date(1988,1,1),
bread=10,
bcomment=10
)
>>>()
>>>hero=HeroInfo(
hname='孙悟空',
hgender=0,
hbook=book
)
>>>()
>>>hero2=HeroInfo(
hname='猪⼋戒',
hgender=0,
hbook_id=
)
>>>()
2)create
通过模型类.()保存。
>>>(
hname='沙悟净',
hgender=0,
hbook=book
)
⼆,删除
删除有两种⽅法
1)模型类对象delete
hero=(id=13)
()
2)模型类.().delete()
(id=14).delete()
三,修改
修改更新有两种⽅法
1)save
修改模型类对象的属性,然后执⾏save()⽅法
hero=(hname='猪⼋戒')
='猪悟能'
()
2)update
使⽤模型类.().update(),会返回受影响的⾏数
(hname='沙悟净').update(hname='沙僧')
四,查询
1基本查询
get查询单⼀结果,如果不存在会抛出模型类.DoesNotExist异常。
all查询多个结果。
count查询结果数量。
>>>()
>>>book=(btitle='西游记')
>>>
>>>(id=3)
>>>(pk=3)
>>>(id=100)
Traceback(mostrecentcalllast):
File"
File"/Urs/delron/.virtualenv/dj/lib/python3.6/site-packages/django/db/models/",line85,inmanager_method
returngetattr(_queryt(),name)(*args,**kwargs)
File"/Urs/delron/.virtualenv/dj/lib/python3.6/site-packages/django/db/models/",line380,inget
.__name
tExist:BookInfomatchingquerydoesnotexist.
>>>()
本文发布于:2022-12-26 14:13:09,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/34155.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |