mysql orm框架_ORM框架介绍

对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。Python中的类 ---> 表

Python里面的类属性 ---> 字段

python 里面的类对象 --->  数据库表里的1条数据

我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。

ORM的出现充当了对象和数据库层次的桥梁作用。

优点:提高我们的开发效率

开发人员技术参差不齐,大神写的sql优化非常好

缺点:查询效率受影响 关系数据库技能退化

Django步骤

要想一个页面展示在用户面前

1.打开浏览器,输入网址,发起请求

2,接受请求 ,响应内容

-url要配置---> 将来 浏览器,输入的路径url(r'^index/')

https://127.0.0.1:8000/index

-视图要写---> 用户输入 网址之后调用的内容def index(request):

return render(request,'index.html')

def + 视图函数的函数名称  第一个参数 是request

render 返回一个模板 (request,html)

3. 模型  models.py 这个模块   mvtdjango给我们提供了一个orm框架

因为有了这个框架 我们可以不需要去写各种 sql语句

orm   类---> 表  属性对应--->字段  实例对象--->1行数据

属性类型当前选择的数据库支持字段的类型

渲染管理表单时使用的默认html控件

在管理站点最低限度的验证 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

字段类型AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。(必须填入参数primary_key=True)

BooleanField:布尔字段,值为True或False。

NullBooleanField:支持Null、True、False三种值。

CharField(max_length=字符长度):字符串。

映射到数据库会是varchar

参数max_length表示最大字符个数。

TextField:大文本字段,一般超过4000个字符时使用。

IntegerField:整数。

DecimalField(max_digits=None, decimal_places=None):十进制浮点数。

参数max_digits表示总位数。

参数decimal_places表示小数位数。

FloatField:浮点数。

DateField[auto_now=False, auto_now_add=False]):日期。

参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。

参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。

参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。

TimeField:时间,参数同DateField。

DateTimeField:日期时间,参数同DateField。

FileField:上传文件字段。

ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片。

选项 约束null:如果为True,表示允许为空,默认值是False。

blank:如果为True,则该字段允许为空白,默认值是False。

对比:null是数据库范畴的概念,blank是表单验证范畴的。

db_column:字段的名称,如果未指定,则使用属性的名称。

db_index:若值为True, 则在表中会为此字段创建索引,默认值是False。

default:默认值。

primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。

unique:如果为True, 这个字段在表中必须有唯一值,默认值是False。

4. 不用sqllite 我们使用mysql

如何去配置我们的mysql

4.1 settings.py DATABASEDATABASES = {

'default': {

'ENGINE':'django.db.backends.mysql',# 数据库类型

'NAME': 'test1',# 数据库的名称,django不会直接给我们创建数据库需要我们手动创建

'USER': 'root',#数据库用户

'PASSWORD': '123456',# 数据库密码

'HOST': '127.0.0.1',

'PORT': '3306',# 端口号

}

}

4.2 我们需要安装一个 python连接mysql的驱动  pymysql

4.3 我们需要把这个驱动 添加到项目里面来

项目下的__init__文件里:import pymysql

pymysql.install_as_MySQLdb()

5. 设计完python的类(表) 不意味着 数据库里面就有这张表

5.1  生成迁移文件python manage.py makemigrations

5.2  执行迁移python manage.py migrate

同步到数据库,创表成功,可以插入数据

6. 查询

6.1 查询 id=1 的书 =  excatlist = BookInfo.objects.filetr(id=1)

list = BookInfo.objects.filetr(id__exact=1)

mysql日志:

配置:sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

然后执行sudo service mysql restart

使用如下命令打开mysql日志文件。sudo tail -f /var/log/mysql/mysql.log

条件查询1.判等 ------>   exact

2.模糊查询 ----->  contains

查询以指定值开头 -----> startswith

查询以指定值结尾 ------>  endswith

3.空值查询  ---->  isnull (是否为null)

4.范围查询 ------>   in (是否包含在范围内)

5.比较查询 ----->  gt、gte、lt、lte:大于、大于等于、小于、小于等于。

6.日期查询 ---- >year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。

F对象和Q对象

查询两个属性的比较会使用F对象。

多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。

如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。

聚合函数

使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg,Count,Max,Min,Sum,被定义在django.db.models中。

aggregate的返回值是一个字典类型

使用count时一般不使用aggregate()过滤器。

注意count函数的返回值是一个数字。

查询集

返回查询集的过滤器如下:all():返回所有数据。

filter():返回满足条件的数据。

exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字。

order_by():对结果进行排序。

返回单个值的过滤器如下:get():返回单个满足条件的对象

count():返回当前查询结果的总条数。

aggregate():聚合,返回一个字典。

判断某一个查询集中是否有数据:

exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。

查询集两大特性惰性执行:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用。

缓存:使用同一个查询集,第一次使用时会发生数据库的查询,然后把结果缓存下来,再次使用这个查询集时会使用缓存的数据。

限制查询集

可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。不支持负数索引。

对查询集进行切片后返回一个新的查询集,不会立即执行查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值