前提:安装三方库
# pip3 install PyMySQL
1、连接数据库
db = pymysql.connect("192.168.30.150", "workhr", "YDJ9E1:o}M", "workemployee", charset='utf8')
参数说明:
IP地址,用户名,密码,数据库名,编码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# !/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect("192.168.30.150", "workhr", "YDJ9E1:o}M", "workemployee", charset='utf8')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print("Database version : %s " % data)
# 关闭数据库连接
db.close()
2、新增
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect("192.168.30.150", "workhr", "YDJ9E1:o}M", "workemployee", charset='utf8')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 插入语句
sql = """insert into `test` ( `name`, `age`, `gender`) values('李素丽','22','女')"""
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except Exception as e:
print('error:', e)
# 如果发生错误则回滚
db.rollback()
# 关闭数据库连接
db.close()
3、查询
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect("192.168.30.150", "workhr", "YDJ9E1:o}M", "workemployee", charset='utf8')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 查询语句
sql = "select * from test"
try:
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
id = row[0]
name = row[1]
age = row[2]
gender = row[3]
# 打印结果
print("id=%s,name=%s,age=%s,gender=%s" % \
(id, name, age, gender))
except Exception as e:
print('error:', e)
print("Error: unable to fetch data")
# 关闭数据库连接
db.close()
4、修改
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect("192.168.30.150", "workhr", "YDJ9E1:o}M", "workemployee", charset='utf8')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 更新语句
sql = "update test t set t.age = 16 where t.name ='李素丽'"
try:
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except Exception as e:
print('error:', e)
# 发生错误时回滚
db.rollback()
# 关闭数据库连接
db.close()
5、删除
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect("192.168.30.150", "workhr", "YDJ9E1:o}M", "workemployee", charset='utf8')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 删除语句
sql = "DELETE FROM test where name ='李素丽'"
try:
# 执行SQL语句
cursor.execute(sql)
# 提交修改
db.commit()
except Exception as e:
print('error:', e)
# 发生错误时回滚
db.rollback()
# 关闭连接
db.close()
5、事务管理
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
① 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
② 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
③ 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
④ 持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 的事务提供了两个方法 commit 或 rollback。
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。