文章目录
数据库的介绍
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-connector
和pip 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映射数据库操作,如图演示: