Django&,Flask&pyrthon原生sql语句 基本操作

renoyuan 2019-08-01 原文

Django&,Flask&pyrthon原生sql语句 基本操作

Django框架 ,Flask框架 ORM 以及pyrthon原生sql语句操作数据库

 

WHAT IS ORM?

ORM( Object Relational Mapping) 对象关系映射 , 即通过面向对象思维方式来实现对数据库的操作.

对模型类对象的操作转化为sql 语句

模块内实现数据库表和模型类的关系映射 : 开发人员只用对模型内的实例化对象进行相应操作,底层函数会自动转化为sql 语句来实现对数据库 的增改查删

 

优点 : 1操作简单更易理解代码编写简单, 2比起原生sql 语句可以节省代码量少可以节省大量开发时间, 符合目前开发的主流思想是用空间换取时间 缩短开发周期降低开发难度

缺点 : 建立了ORM映射 对模型类对象的操作 内层执行命令的依然是sql语句 这个反射的过程 存在不少的性能消耗问题,索性现在都有懒加载,缓存等机制 让ORM 性能消耗大大降低 , 相信未来会更低到可忽略

 

目前python主流 框架 Django,Flask 以及原生sql 语句 在实际编程的使用对比

原生sql

PyMySQL 模块

python3 连解数据库模块

实现流程

1 导入模块包
2 创建连接对象
3 获取游标对象
4 编写sql 语句
5 执行sql 语句
5.1 查询语句- 接受结果
   5.2 增删改语句 - 提交执行 或者回滚执行
6 关闭 游标对象
7 关闭连接对象
   

 

 

对数据库的CURD操作

 

Django

django.db 模块

Django框架自带数据库映射模块

实现流程

0 配置数据库
1 定义模型类
2 创建模型类的实例化对象
3 利用对象的方法实现对数据库的CURD

django.db 模块 定义模型类

导包 models

所有自定义模型类都继承 models.Model

案例:

class BookInfo(models.Model):
# django.db 会自动映射id 字段不用指定
# CharField 指定数据类型为字符串类型 参数是字段约束
name = models.CharField(default=0, verbose_name='书名') # 表库列名 映射属性名
# IntegerField 指定数据类型为整型 参数是字段约束
count = models.IntegerField(default=0, verbose_name='阅读量') # 表库列名 映射属性名

class Meta:
      db_table = 'tb_books' # 指明数据库表名 映射表
      verbose_name = '图书' # 在admin站点中显示的名称
      verbose_name_plural = verbose_name # 显示的复数名称
       
      def __str__(self):
      """定义每个数据对象的显示信息"""
      return self.btitle
   

 

对数据库的CURD操作

create:

案例

 

# 原生sql insert into tb_book values (0,"少年维特的烦恼", 1000)
方法一
book = BookInfo(name="少年维特的烦恼", count=1000)
book.save()
方法二 升级版
BookInfo.objects.create(
name="仲夏夜之梦",
count=1000
)

update:

案例

# 原生sql update tb_book set name = "围城" where id = 1;
方法一:
book = BookInfo.objects.get(id=1)
book.name = "围城"
book.save()
方法二 升级版:
# .objects.filter.update() 会修改所有过滤出的行 一般过滤条件用id
BookInfo.objects.filter(name="人间失格").update(name="西游记")

 

read:

案例

 # 获得所有数据行,相当于SQL中的SELECT * FROM
list_all = BookInfo.objects.all()
# filter相当于SQL中的WHERE,可设置条件过滤结果
list_filter = BookInfo.objects.filter(count=1000)
# 获取单个对象
response1 = BookInfo.objects.get(id=1)
 #数据排序
list_all = BookInfo.objects.all().order_by("count")
 # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
 list_limit = Test.objects.all().order_by('count',desc)[0:2]

 

delete:

案例

原生sql delete from tb_book where id=1
test1 = BookInfo.objects.get(id=1)
test1.delete()

 

这样看ORM 与原生sql 相差不大

面向对象的优势在强大的继承封装能力

Django 框架加上 DRF 框架后 对数据库 的CURD 将直接被封装到底层,开发者只用指定路由,序列化器,模型类即可

完成CURD

 

Flask

SQLAlchemy模块

Flask 为轻量级的框架没有自带ORM包一般用SQLAlchemy模块

实现流程

0 配置数据库
1 定义模型类
2 创建模型类的实例化对象
3 利用对象的方法实现对数据库的CURD

SQLAlchemy模块定义模型类

db = SQLAlchemy(app) 所有模型类继承 db.Model

案例:

class BookInfo(db.Model):
	# 映射数据库表
	 __tablename__ = 'user_basic'
     # 映射列 参数(表类字段名, 数据类型, 其他约束..., admin站点中显示的名称)
	 id = db.Column('user_id', db.Integer, primary_key=True, doc='书籍id')

 

 

对数据库的CURD操作

SQLAlchemy 的操作指令更接近PyMySQL 模块

create:

案例

# 原生sql insert into tb_book values (0,"少年维特的烦恼", 1000)
方法一 
book = BookInfo( name="少年维特的烦恼")
db.session.add(book)
db.session.add_all([user1, user2, user3]) # 批量增加
db.session.commit()

 

update

案例:

# 原生sql update tb_book set name = "围城" where id = 1;
方法一:
book = BookInfo.query.get(1)
book.name = "围城"
db.session.add(book)
db.session.commit()
方法二 升级版:
# django.db update 传入是 命名参数 SQLAlchemy update 传入是字典
BookInfo.query.filter_by(name="人间失格").update({(name:"西游记"}))
db.session.commit()

 

read

案例:

方法一:
# 获得所有数据行,相当于SQL中的SELECT * FROM
 list_all = BookInfo.query.all()
 # 查询第一个 有什么用?
 book = book.query.first()
 # 根据ID 查询,不存在主键返回 None [django.db 中可以根据更多字段查 get 不到会报错]
 book = book.query.get(1)   
方法二:
    list_all = db.session.query(BookInfo).all()
    book = db.session.query(BookInfo).first()
    book = db.session.query(BookInfo).get(1)
 # filter和filter_by相当于SQL中的WHERE,可设置条件过滤结果
 list_filter = BookInfo.query.filter_by(count=1000)  #filter_by 
 list_filter = BookInfo.query.filter(BookInfo.count==1000)  
#filter是全局过滤要指定模型 条件要用python 比较符号
# 和fiest()同时使用过滤唯一数据 类似django.db get
 # 偏移起始值得置位 offset
 list_all = BookInfo.query.offset(2).all()
# 限制获取数据 
 list_all = BookInfo.query.limit(3).all()
  #数据排序
list_all = BookInfo.query.order_by(BookInfo.id.all()
 list_all = BookInfo.query.order_by(BookInfo.id.desc()).all()
 

 

 

 

 

发表于 2019-08-01 19:15 貌似大家 阅读() 评论() 编辑 收藏

 

版权声明:本文为renoyuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/renoyuan/p/11284696.html

Django&,Flask&pyrthon原生sql语句 基本操作的更多相关文章

  1. Django 框架介绍

    Django 框架介绍 MVC框架和MTV框架   简单了解一下什么是MVC框架。MVC(Model View […]...

  2. 《追风筝的人》书摘与笔记

    书籍信息: [美] 卡勒德·胡赛尼《追风筝的人》(点我查看书籍详情) 书摘1: 到了喀布尔之后,我发现哈桑根本 […]...

  3. Django Rest Framework源码剖析(二)—–权限

    一、简介 在上一篇博客中已经介绍了django rest framework 对于认证的源码流程,以及实现过程 […]...

  4. Django 学习笔记(六)MySQL配置

    环境:Ubuntu16.4   工具:Python3.5 一、安装MySQL数据库 终端命令: sudo ap […]...

  5. Goby资产扫描工具安装及报错处理

    官网: https://cn.gobies.org/index.html 产品介绍: 帮企业梳理资产暴露攻击面 […]...

  6. 给我一台全新的服务器,使用nginx+gunicorn+supervisor部署django

    0.准备工作 在一台全新的服务器中新建用户以及用户的工作目录,之后的操作都以这个用户的身份进行,而不是直接用r […]...

  7. Django Models随机获取指定数量数据方法

    方法一:新增models的Manager方法 下面就直接发代码了 class RandomManager(mo […]...

  8. 在Django中使用Channels功能

    前言:最近后台写游戏更新版本功能,简单就是前端发送更新请求,后端需要对很多台服务器进行更新和各种操作,本来想着 […]...

随机推荐

  1. ORM之炀,打造自已独特的开发框架CRL

    ORM一直是长久不衰的话题,各种重复造轮子的过程一直在进行,轮子都一样是圆的,你的又有什么特点呢? CRL这个 […]...

  2. Openvpn介绍与搭建

    内容已被删除...

  3. 关于elementUi tab组件路由跳转卡死问题

    好久没来了,周五项目终于要上线了(*^▽^*),上线之前测出一个很恶心的bug真真是。。。 项目:Vue + […]...

  4. Python的自省机制

    什么是自省? 在日常生活中,自省(introspection)是一种自我检查行为。 在计算机编程中,自省是指这 […]...

  5. 单点登录原理与简单实现

    (2017-09-22更新)GitHub:https://github.com/sheefee/simple- […]...

  6. 论文查重是怎么查的 – kk20_625

    论文查重是怎么查的 论文查重是怎么查的 论文查重系统作为高校中检查学生毕业论文的重要工具,每年的毕业生将使用对 […]...

  7. 在sql server里获取时间本周,上周,本月,上月

    本代码在存储过程中使用 一。周时间获取 首先声明变量 DECLARE @ThisWeekStartTime N […]...

  8. 万物皆对象(二)

        还是聊一聊java里面的Object对象,想到哪就引申到哪了,比如jvm内存模型,比如GC,后续如果有 […]...

展开目录

目录导航