python之PyMysql

1. 前言

  • 不同的数据库在python的使用需要引入不同的模块,代码大同小异,这里以mysql为例子,mysql对应的模块有很多,官方推荐为PyMySQL。
  • PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
  • PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
pip3 install PyMySQL
import PyMySQL

数据库其实就是一个网络服务器,所有的数据库都是基于tcp协议,因此需要host和账号密码。
在PyMySQL中两个重要的对象,分别为Connection对象和Cusor对象。

2. Connection对象(连接对象)

2.1 作用

用于建立与数据库的连接

2.2 创建Connection对象

conn = connect(参数列表)

参数说明:
host: 连接的mysql主机,如果为本机,可以填‘lolcalhost’
port: 连接的mysql主机的端口,默认为3306,一般不是改。
db: 待连接的数据库名
user: 连接的用户名
password: 连接的密码
charset: 通信采用的编码方式,默认是’gb2312’,要求与数据库创建时指定的编码一致,否则中文或乱码

2.3 对象的方法

2.3.1 关闭连接 close()

网络服务会消耗大量资源,需要关闭连接,关闭连接为了释放资源供计算机其它进程使用。

2.3.2 事务相关方法

  • commit() 事务提交

  • rollbak() 事务回滚

3. Cursor对象(操作数据库对象)

3.1 作用

用于执行SQL语句(所有SQL类型的语句)

3.2 创建Cursor对象

利用Connection对象中的cursor()方法,创建Cursor对象。

cursor = conn.cursor()

3.3 Cursor对象方法

3.3.1 关闭 close()

数据库连接关闭了,Cursor也关闭了;
先关cursor,再关Connect。

3.3.2 执行SQL语句execute()

execute(SQL语句),返回受影响的行数

3.3.3 执行查询语句 fetchone()

fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组

3.3.4 获取当前行的下一行 next()

3.3.5 查询所有结果 fetachall()

获取结果集的所有集,一行构成一个元组,再将这些元组组入一个元组返回。

4. 案例

案例参考: Python3 MySQL 数据库连接 - PyMySQL 驱动

  • 在进行数据库操作时,要进行异常捕获,防止数据库操作错误。如:
#!/usr/bin/python3
 
import pymysql
 
# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
 
# 使用cursor()方法获取操作游标 
cursor = db.cursor()
 
# SQL 插入语句
# 方法1
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
# 方法2
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES (‘%s’, ‘%s’, %s, ‘%s’, %s)"""%('Mac', 'Mohan', 20, 'M', 2000)

# 方法3:   极力推荐,在SQL中使用格式化,在excute中传入
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES (%s, %s, %s, %s, %s)"""
         
try:
   # 执行sql语句
   # 方法1和方法2
   cursor.execute(sql)
   #方法3:
   cursor.execute(sql, ('Mac', 'Mohan', 20, 'M', 2000))
   # 提交到数据库执行
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()
finally:
	# 关闭数据库连接
	db.close()
  • 在创建connections对象时,自动加入了事务处理。自动开启了begin,只需要执行commit()或者roolback()即可。
  • 利用python格式化写SQL语句时,一定要主要引号’’,在SQL语句中字符串存在 引号’’, 在利用python格式化写SQL语句时一定要加上’%s’,如上述方法2.
  • 方法3在调用excute()方法时,会自动给传入的字符串加上引号;极力推荐方法三书写方法,方法二存在安全隐患,如:
sql = "select * from 表名 where 字段 > %s" %("zs or 1 = 1")

会将所有数据都给查询出来。
问题:为什么调用excute()就不会??待验证

5. SQL语句的封装

SQL语句在python中千篇一律,为了后续更加方便使用代码,对SQL语句进行封装。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值