用Python3操作Mysql
- 安装第三方库【pymysql】
- 连接数据库
- 插入数据
- 批量插入数据
- 查询数据
- 修改数据
- 删除数据
- 事务说明
安装第三方库【pymysql】
在python3中,可以使用【pymysql】来操作Mysql数据库。
通过【pip install pymysql】命令安装。
然后在代码中通过以下语句来测试是否可用:
import pymysql
连接数据库
下文内容都假设Mysql数据库及表都以建好,信息如下:
Mysql User:root
Mysql Password: ******
数据库名:test,表名:hello,字段:id(主键,自增),name
数据库连接代码如下:
import pymysql # 导入库
# 为了便于讲解,把获取链接封装到一个方法里
def getConnection():
# 数据库连接
conn = pymysql.connect(host='localhost', user='root',password='******',database='test',charset='utf8')
# 可以执行SQL语句的光标对象
cursor = conn.cursor()
# 返回连接和光标对象,以供后续代码使用
return (conn, cursor)
# 连接和光标对象使用完后,要释放到相应的资源,也封闭到一个函数里
def closeConnection(conn, cursor):
cursor.close()
conn.close()
插入数据
直接看代码:
# 定义插入方法
def myAdd():
conn, cursor = getConnection() # 获取连接与光标对象,上面已定义
sql = 'insert into hello(name) values (%s)' # 定义sql语句
uName = 'xiaomin'
try:
cursor.execute(sql, [uName]) # 执行sql,但此时还未提到到数据库中
conn.commit() # 提交事务
last_id = cursor.lastrowid
except Exception as e:
conn.rollback() # 如发生异常,则回滚事务
finally:
closeConnection(conn, cursor) # 释放连接与光标对象,上面已定义
# 调用插入方法
myAdd()
批量插入数据
直接看代码:
# 定义批量插入方法
def myMultiAdd():
conn, cursor = getConnection()
sql = 'insert into hello(id, name) values (%s, %s)'
records = [(15, 'a'), (16, 'b'), (17, 'c')]
try:
cursor.executemany(sql, records) # 遍历records列表中的元组进行插入,中间有异常时,则到异常处理中进行回滚
conn.commit() # 提交事务
except Exception as e:
conn.rollback() # 异常时回滚事务
print(e)
finally:
closeConnection(conn, cursor)
# 调用批量插入方法
myMultiAdd()
查询数据
直接看代码:
# 定义查询方法
def myQuery():
conn, cursor = getConnection() # 获取连接与光标对象,上面已定义
sql = 'select * from hello'
cursor.execute(sql)
rtl = cursor.fetchall() # 获取全部数据
print(rtl)
closeConnection(conn, cursor) # 释放连接与光标对象,上面已定义
# 调用查询方法
myQuery()
修改数据
直接看代码:
# 定义修改方法
def modify():
conn, cursor = getConnection()
sql = 'update hello set name=%s where id=%s'
id = '3'
uName= 'like'
try:
cursor.execute(sql, [uName, id]) # 执行,但并示在数据库反映
conn.commit() # 提交事务
except Exception as e:
conn.rollback() # 如发生异常则回滚事务
print(e)
finally:
closeConnection(conn, cursor)
# 调用修改方法
myModify()
删除数据
直接看代码:
# 定义删除方法
def myDelete():
conn, cursor = getConnection()
sql = 'delete from hello where id=%s'
id = '3'
try:
cursor.execute(sql, [id]) # 执行,但并示在数据库反映
conn.commit()
except Exception as e:
conn.rollback()
print(e)
finally:
closeConnection(conn, cursor) # 如发生异常则回滚事务
# 调用删除方法
myDelete()
事务说明
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。具体的可以百度一下,这样不哆嗦了。
在Python中,事务提供了两个方法 commit 方法和 rollback方法。
当游标建立之时,就自动开始了一个隐形的数据库事务。
- 当调用commit()方法时,会将游标里的所有操作提交到数据库;
- 当调用rollback()方法时,会回滚游标里的所有操作;
- 上述任一方法被调用时,都会开启一个新的事务。
例:
try:
cursor.execute(sql, ['a', 1]) # 执行SQL语句
cursor.execute(sql, ['b', 2]) # 执行SQL语句
cursor.execute(sql, ['c', 3]) # 执行SQL语句
cursor.commit() # 提交到数据库
except Exception as e:
conn.rollback() # 发生异常时回滚所有cursor游标中的操作(不管有没有执行过的)