一.前言
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。
本博客测试python版本:3.6。mysql版本:5.6
二、安装PyMSQL
通过 pip 安装 pymysql
进入 cmd 输入 pip install pymysql.
回车等待安装完成;
安装完成后出现如图相关信息,表示安装成功。
三.测试连接
连接数据库前,请先确认以下事项:
您已经创建了数据库.
在数据库中您已经创建了表
表中已经添加了相应的数据。
在你的机子上已经安装了 Python pymysql模块。
3.1 查询操作
# 1.导入 pymysql
import pymysql
# 2.打开数据库连接
db = pymysql.connect(host="localhost", user="root",
password="123456", db="test", port=3306,charset='utf8')
# 3. 使用cursor()方法获取操作游标
cur = db.cursor()
# 4. 编写sql 查询语句 user 对应我的表名
sql = "select * from user"
try:
# 5.执行 SQL语句
cur.execute(sql)
# 6. 获取查询的所有记录
results = cur.fetchall()
print("id", "name", "password")
# 7. 遍历结果
for row in results:
id = row[0]
name = row[1]
password = row[2]
print(id, name, password)
except Exception as e:
raise e
finally:
# 8. 关闭连接
cur.close()
db.close()
3.2插入操作
# 1.导入pymysql
import pymysql
# 2.插入操作
db = pymysql.connect(host="localhost", user="root",
password="123456", db="test", port=3306,charset='utf8')
# 3. 使用cursor()方法获取操作游标
cur = db.cursor()
# 4. 创建插入语句
sql_insert = "insert into user(id,username,password) values(4,'liu','1234')"
try:
# 5.执行SQL
cur.execute(sql_insert)
# 6. 提交事物
db.commit()
except Exception as e:
# 7. 错误时回滚事物
db.rollback()
finally:
# 8.关闭
cur.close()
db.close()
3.3 更新操作
# 1.导入pymysql
import pymysql
# 2.插入操作
db = pymysql.connect(host="localhost", user="root",
password="123456", db="test", port=3306,charset='utf8')
# 3. 使用cursor()方法获取操作游标
cur = db.cursor()
# 4. 创建更新语句
sql_update ="update user set username = '%s' where id = %d"
try:
# 5.执行SQL
cur.execute(sql_update % ("xiongda", 3))
# 6. 提交事物
db.commit()
except Exception as e:
# 7. 错误时回滚事物
db.rollback()
finally:
# 8.关闭
cur.close()
db.close()
3.4 删除操作
# 1.导入pymysql
import pymysql
# 2.插入操作
db = pymysql.connect(host="localhost", user="root",
password="123456", db="test", port=3306,charset='utf8')
# 3. 使用cursor()方法获取操作游标
cur = db.cursor()
# 4. 创建删除语句
sql_delete ="delete from user where id = %d"
try:
# 5.执行SQL
cur.execute(sql_delete % (3))
# 6. 提交事物
db.commit()
except Exception as e:
# 7. 错误时回滚事物
db.rollback()
finally:
# 8.关闭
cur.close()
db.close()
3.5 fetch数据类型
关于默认获取的数据是元祖类型,如果想要获得字典类型的数据,即:
# 1.导入 pymysql
import pymysql
# 2.打开数据库连接
db = pymysql.connect(host="localhost", user="root",
password="123456", db="test", port=3306, charset='utf8')
# 3. 使用cursor()方法获取操作游标
cur = db.cursor(cursor=pymysql.cursors.DictCursor)
# 4. 编写sql 查询语句 user 对应我的表名
sql = "select * from user"
try:
# 5.执行 SQL语句
cur.execute(sql)
# 6. 获取查询的所有记录
results = cur.fetchall()
print(results)
#[{'id': 1, 'name': '张三', 'password': '123456'}, {'id': 2, 'name': '李四', 'password': '123456'}]
except Exception as e:
raise e
finally:
# 8. 关闭连接
cur.close()
db.close()
3.6 调用存储过程
1.无参调用
# 1.导入 pymysql
import pymysql
# 2.打开数据库连接
db = pymysql.connect(host="localhost", user="root",
password="123456", db="test", port=3306, charset='utf8')
# 3. 使用cursor()方法获取操作游标
cur = db.cursor(cursor=pymysql.cursors.DictCursor)
try:
#无参数存储过程
cur.callproc('p1') # 等价于cur.execute("call p1()")
# 获取查询的所有记录
results = cur.fetchall()
print(results)
#[{'id': 1, 'name': '张三', 'password': '123456'}, {'id': 2, 'name': '李四', 'password': '123456'}, {'id': 3, 'name': '王五', 'password': '123456'}]
except Exception as e:
raise e
finally:
# 关闭连接
cur.close()
db.close()
2.有参调用
# 1.导入 pymysql
import pymysql
# 2.打开数据库连接
db = pymysql.connect(host="localhost", user="root",
password="123456", db="test", port=3306, charset='utf8')
# 3. 使用cursor()方法获取操作游标
cur = db.cursor(cursor=pymysql.cursors.DictCursor)
try:
#无参数存储过程
cur.callproc('p2',args=(1,'@n')) #注意:出参 @n 需要存储过程中通过 select @n;查询一次
# 获取查询的所有记录
results = cur.fetchall()
print(results)
except Exception as e:
raise e
finally:
# 关闭连接
cur.close()
db.close()
3.7 获得自增ID
# 1.导入pymysql
import pymysql
# 2.插入操作
db = pymysql.connect(host="localhost", user="root",
password="123456", db="test", port=3308,charset='utf8')
# 3. 使用cursor()方法获取操作游标
cur = db.cursor()
# 4. 创建插入语句
sql_insert = "insert into user(id,name,password) values(null,'liu','1234')"
try:
# 5.执行SQL
cur.execute(sql_insert)
# 6. 提交事物
db.commit()
except Exception as e:
# 7. 错误时回滚事物
db.rollback()
finally:
# 8.关闭
cur.close()
db.close()
print(cur.lastrowid)