安装
安装mysql数据库的难度和oracle数据库简直没得比,安装步骤如下:
安装MariaDB
安装pymysql
基本操作
数据库基本操作主要是:
- 创建连接
- 获取游标
- 执行sql
- 提交事务:针对非查询性SQL
代码
DDL
DDL:数据定义语言。包括创建表,创建索引等等
DML
DML:数据操作语言,包含增删改三项操作。
insert
update
delete
QUERY
基础查询
主要有三个函数
- cursor.fetchall 返回行的元组
- cursor.fetchmany 返回行的元组, 可以指定返回前N行 相当于对fetchall切片fetchall[:N]
- cursor.fetchone 返回首行, 相当于fetchall[0]
查询语句如下:
三种方法得到的结果分别为:
可见:每行数据也是一个元组, 元组的内容由sql决定
如果要让返回的数据带上列名,也就是要返回字典,那么就需要用到cursors.DictCursor。
DictCursor
创建cursor时创建DictCursor类型的就可以fetch回来字典形式的结果了
代码
fetchall返回结果为:
返回每一行记录都是一个字典,整体结果是由字典组成的列表。而默认的cursor是由元组组成的元组。
参数化查询
基础的SQL注入
当传入参数的age中带sql条件的时候,就会发生sql注入,使得结果可能并不满足要求。
为了解决sql注入,我们可以使用参数化查询。
使用参数化查询
以上代码做以下修改之后就可以避免sql注入
参数化查询最大的优势在于避免了SQL注入,同时参数化之后避免了sql多次硬解析,能提高查询效率。所以,总是应该使用参数化查询。
上下文管理
数据库连接和游标都支持上下文管理。
游标
查看cur实例对应Cursor类的方法
对应的with语句使用如下
with语句块结束之后cur就已经关闭了。
连接
通过help命令查看Connection类的__enter__
和__exit__
两种方法的实现
查看结果如下:
__enter__
方法会返回一个游标__exit__
方法:如果成功推出就会自动提交commit,如果发生异常就会回滚rollback
对应的with语句使用如下
虽然游标没有关闭, 但是数据库操作已经提交。
游标和连接共同上下文管理
退出整个上下文管理块之后,游标会关闭,并且会自动提交。
数据库连接池
一般来说,应用程序访问数据库的过程是:
- 装载数据库驱动程序
- 建立数据库连接
- 访问数据库,执行sql语句
- 断开数据库连接
相对于性能正常的SQL的执行效率来说,建立连接是一个费时的活动,而且系统还要为每一个连接分配内存资源。在现在web请求的大并发量情况下,必然会导致频繁的数据库操作。而频繁的进行数据库连接操作势必占用很多的系统资源,使得系统的响应速度下降,严重的甚至会造成服务器的崩溃。
引入数据库连接池技术之后,应用程序访问数据库的过程是:
- 请求数据库操作时,从连接池中取出创建好的数据库连接
- 执行sql语句
- 不断开数据库连接,而是放回连接池中,等待下次使用
连接池还有个优点就是能控制数据库的压力,当大量用户同时涌入时,连接池只会使用池限制数据库连接数目,而不会不停的向数据库请求连接,最后导致服务器崩溃。
Python实现数据库连接池
代码如下