我爱Flask之数据库介绍与SQLALchemy的简单使用(你想要的这都有!!)

数据库的介绍

1. 数据库的简介

       •数据存储经历了从口口相传、结绳记事、用龟片或贝壳、用竹简、青铜器、纸(莎纸、羊皮)到软盘、光盘、硬盘文件等漫长的发展,存储的内容越来越多便捷性和持久性也越来越高
       •传统数据记录和存储的缺点:
              不便于保存,易丢失
              备份困难
              查找不便
       •现代文件存储方式虽然在很大程度上克服了上面的困难,但还是存在一定缺陷:
              文件较大时,查询、写入、修改等方面的性能会大大降低
              不易扩展
              不同编程语言操作文件的方式不同,如果切换语言操作文件会很不方便,扩展性较低
       •使用数据库存储的特点:
              持久化存储数据存储到本地,不易丢失
              读写速度极高
              保证数据的有效性
              保证各个字段的类型正确,值有意义
              对程序支持性非常好,容易扩展
       •我们在网站或者应用软件上看到的具有美观格式化的数据,都是通过查询后端数据库并使用特定格式渲染出来呈现给我们的
数据库的理解:
一个Excel(工作薄)可以理解为一个数据库,一个Sheet(工作表)可以理解为一个,一个表的字段可以理解为表头,即一列对应一个字段一行数据表示一条记录,同时不同的表中的数据还可以产生关系,如外键,如下图:
在这里插入图片描述

2. MySQL介绍

       •MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一

MySQL的特点

       •使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性
       •支持多种操作系统,如Linux、Windows、AIX、FreeBSD、HP-UX、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等
       •为多种编程语言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等
       •支持多线程,充分利用CPU资源
       •优化的SQL查询算法,有效地提高查询速度
       •提供多语言支持,常见的编码如GB2312、BIG5、UTF8
       •提供TCP/IP、ODBC和JDBC等多种数据库连接途径
       •提供用于管理、检查、优化数据库操作的管理工具
       •大型的数据库,可以处理拥有上千万条记录的大型数据库
       •支持多种存储引擎
       •MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择       •MySQL可以作为网站数据库
       •MySQL使用标准的SQL数据语言形式
       •Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统
       •在线DDL更改功能
       •复制全局事务标识
       •复制无崩溃从机
       •复制多线程从机

3.MySQL数据库的安装

注意:

新版Flask支持的MySQL版本必须大于等于5.5,一定要大于等于5.5版本以上,否则会出现连接不上的情况
如果下面所需的工具在官网下载较慢,可评论联系博主,博主私发给你们,不收取任何费用
       •服务端安装
       服务端用于开启MySQL服务
       •官网下载安装:
       访问官网下载,但是可能很慢,下载地址:https://www.mysql.com/
       •集成工具安装
       通过phpStudy等安装
       可点击https://m.xp.cn/下载phpstudy并安装
       •客户端安装使用
       win键 + R 使用CMD来操作
       •可视化工具
       sqlyog,下载地址:https://sqlyog.en.softonic.com/
       navicat,下载地址:http://www.navicat.com.cn/

ORM的介绍

       •对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”
       •简而言之:
       •它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了
       •Flask框架操作数据库就是基于ORM的

SQLAlchemy介绍和基本使用

1.SQLAlchemy简介

安装以下库出现下载速度太慢导致失败,可使用换源安装,可参考python换源安装库参考
       数据库是一个网站,各种应用的基础,Flask可以使用很多种数据库,如MySQL、MongoDB、SQLite、PostgreSQL等。这里使用MySQL
       在Flask中,如果想要操作数据库,可以使用ORM,使用ORM操作数据库使数据库交互变得非常简单方便

Flask操作数据库,需要先安装一些库来更加方便操作:
       安装时,先进入虚拟环境所在目录
       如果未切换到虚拟环境需要通过命令pipenv shell进入虚拟环境
       •需要安装的库如下:
       pymysql
pymysql是用Python来操作mysql的库,通过命令pip install pymysql进行安装。
       SQLAlchemy
       SQLAlchemy是一个数据库的ORM框架,通过命令pip install SQLAlchemy安装
       mysql-connector
       用于通过Python连接数据库,安装命令为pip install mysql-connectorpip install mysql-connector-python

2.SQLAlchemy的基本使用

       •使用原生SQL语句示例如下:

from sqlalchemy import create_engine

# 主机地址(也可以写成:localhost)
HOSTNAME = '127.0.0.1'
# 所要连接的数据库
DATABASE = 'flask_connect'
# 端口号,一般固定为 3306、
PORT = 3306
# 创建连接时的用户名和密码
USERNAME = 'root'
PASSWORD = 'root'

# 创建数据库连接引擎
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)

# 创建连接
with engine.connect() as conn:
    # 使用原生SQL语句
    result = conn.execute('select * from students')
    print(result.fetchone())

       •控制台输出为:
在这里插入图片描述

       •使用sqlalchemy导入的函数create_engine()创建引擎实例,其中传入该函数的参数形式为:

dialect+driver://username:password@host:port/database?charset=utf8

       •参数说明:
       dialect是数据库的类型,比如MySQL、PostgreSQL、SQLite等,并且转换成小写
       driver是Python中操作对应数据库的驱动,如果不指定,会选择默认的驱动,比如MySQL的默认驱动是MySQLdb
       username是连接数据库的用户名
       password是该用户的密码
       host是连接数据库的域名
       port是数据库监听的端口号
       database是需要连接的数据库的名字
执行更多原生SQL语句测试如下:
       •先在Python文件同级目录下创建文件config.py,将之前文件中数据库配置选项的常量都放入该文件中,如下:

from sqlalchemy import create_engine

# 主机地址(也可以写成:localhost)
HOSTNAME = '127.0.0.1'
# 所要连接的数据库
DATABASE = 'flask_connect'
# 端口号,一般固定为 3306、
PORT = 3306
# 创建连接时的用户名和密码
USERNAME = 'root'
PASSWORD = 'root'

# 创建数据库连接引擎
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

       •创建执行原生SQL语句的Python文件如下:

from sqlalchemy import create_engine
from config import DB_URL

# 创建数据库引擎
engine = create_engine(DB_URL)

# 创建连接
with engine.connect() as conn:
    # 判断表存在则删除
    conn.execute("drop table if exists staffs")
    # 创建表
    conn.execute("create table staffs(id int primary key auto_increment, name varchar(30), salary int)")
    # 插入数据
    conn.execute("insert into staffs values(default,'tom', 178),(default, 'cbh', 188)")
    # 查询数据
    results = conn.execute("select * from staffs")
    # 输出数据
    for result in results:
        print(result)

       •控制台输出:
在这里插入图片描述

ORM和SQLAlchemy的简单使用

       •随着项目规模的增大,采用原生SQL的方式会导致代码中大量的SQL语句,并对项目的进展产生不利影响:
       •代码复用率较低
       SQL语句较多,重复率较高,复用性较低,越复杂的SQL语句条件越多,代码会越来越多。
       •修改不方便
       很多SQL语句是在业务逻辑中拼出来的,如果数据库需要更改,就要去修改这些代码逻辑,很容易漏掉或增加某些SQL语句的修改
       •安全性受影响
       原生的SQL语句SQL注入的风险较大
使用ORM进行优化:
ORM的优点如下:
       •易用性
       使用ORM进行数据库开发可以有效减少SQL语句,写出来的模型也更加直观。
       •性能损耗小
       •设计灵活
       可以更轻松地写出复杂的查询语句。
       •可移植性
       SQLAlchemy封装了底层的数据库实现,支持多个关系型数据库,包括MySQL、SQLite等
模型通过ORMy映射数据库操作,如图演示:
在这里插入图片描述

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值