relation是什么意思

更新时间:2022-12-26 14:13:09 阅读: 评论:0


2022年12月26日发(作者:朝鲜人看中国)

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"",line1,in

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图