创建连接
import pymysql
from pymysql.cursors import DictCursor,SSDictCursor
# DictCursor,SSDictCursor分别为字典游标类型,和无缓冲区字典类型
con = pymysql.connect(
host=None, # 主机
user=None, # 用户名
password='', # 密码
database=None, # 数据库名
port=0, # 端口
unix_socket=None, # socket或TCP/IP协议
charset='', # 编码方式 数据中带有中文请选择utf-8
sql_mode=None, # sql模式
read_default_file=None, # 读取的默认文件[client]部分
conv=None, # 转换器
use_unicode=None, # 使用unicode编码
client_flag=0, # 客户端标志
cursorclass=, # 游标的数据集的数据类型 默认为元组 可选DictCursor,SSDictCursor
init_command=None, # 连接成功后执行的第一条命令
connect_timeout=10, # 设置连接超时时间
ssl=None, # ssl
read_default_group=None, # 配置文件中读取组信息
compress=None, # 不支持
named_pipe=None, # 不支持
autocommit=False, # 自动提交
db=None, # 为兼容MySQLdb相当于database
passwd=None, # 为兼容MySQLdb相当于password
local_infile=False, # 本地文件
max_allowed_packet=16777216, # 允许的最大数据包大小
defer_connect=False, # 延时建立连接
auth_plugin_map=None, # 用户插件映射
read_timeout=None, # 设置读取超时时间
write_timeout=None, # 设置写入超时时间
bind_address=None, # 绑定IP地址
binary_prefix=False, # 二进制前缀
program_name=None, # 程序名
server_public_key=None # 公钥
)
连接属性
print(con.open) # 连接是否开放
# >> True
print(con.get_host_info()) # 获取主机信息
# >> socket 182.61.18.124:3306
print(con.host_info) # 获取主机信息
# >> socket 182.61.18.124:3306
print(con.get_server_info()) # 获取服务器信息
# >> socket 182.61.18.124:3306
print(con.server_thread_id) # 服务器线程ID
# >> (52689,)
print(con.server_capabilities) # 服务器容量
# >> 3355443199
print(con.server_charset) # 服务器编码方式
# >> utf8mb4
print(con.server_language) # 服务器语言
# >> 255
print(con.server_public_key) # 服务器公钥
# >> None
print(con.server_status) # 服务器状态
# >> 2
print(con.server_version) # 服务器版本
# >> 8.0.18
连接方法
con.select_db("database_name") # 设置当前数据库
con.ping(reconnect=True) # 检查服务器断开则重连
con.show_warnings() # 错误警告(有返回值)
con.begin() # 开启事务
con.rollback() # 事务回滚
con.commit() # 事务提交
con.affected_rows() # 影响行数(有返回值)
con.close() # 关闭连接
- 在进行数据的操作(
插入
,修改
,删除
)时,必须执行con.commit()
方法进行提交才能生效。
建立游标
cur = con.cursor(pymysql.cursors.DictCursor) # 自定义游标类型为字典
cur = con.cursor() # 默认为元祖类型
游标属性
print(cur.connection) # 连接对象地址
# >> <pymysql.connections.Connection object at 0x0347EDF0>
print(cur.arraysize) # 指定.fetchmany()一次获取的数据条数
# >> 1
print(cur.description) # 字段的描述
# >> (('id', 3, None, 11, 11, 0, False), ('name', 253, None, 64, 64, 0, True), ('price', 4, None, 12, 12, 31, True))
print(cur.lastrowid) # 上次操作后的最后一行数据的id号
# >> None
print(cur.rowcount) # 当前结果集中游标所在行的索引(起始行号为 0)
# >> 3
print(cur.rownumber) # 最近一次 execute() 创建或影响的行数
# >> 0
print(cur.max_stmt_length)# 数据包的最大值默认为 1024000
# >> 1024000
游标方法
cur.mogrify("insert into goods value('{}','{}','{}')".format('31','苹果','8.9') # 查看处理过后的sql语句
# >> insert into goods value('31','苹果','8.9')
执行语句
cur.execute("select * from goods") # 执行单条sql语句
cur.executemany("insert into goods value(%s,%s,%s)",[('1','西瓜','8.5'),('2','苹果','8.9')]) # 执行多条不同参数的sql语句
查看内容
print(cur.fetchall()) # 获取游标中所有数据
# >> [{'id': 22, 'name': '葡萄', 'price': 10.0}, {'id': 23, 'name': '苹果', 'price': 10.0}, {'id': 24, 'name': '火龙果', 'price': 10.0}]
print(cur.fetchmany(2)) # 获取游标中2条数据 默认获取1条数据
# >> [{'id': 22, 'name': '葡萄', 'price': 10.0}, {'id': 23, 'name': '苹果', 'price': 10.0}]
print(cur.fetchone()) # 获取游标中的1条数据
# >> {'id': 22, 'name': '葡萄', 'price': 10.0}
移动游标
cursor.scroll() # 默认是相对位置
cursor.scroll(1, "relative") # 相对位置
cursor.scroll(0, "absolute") # 绝对位置
释放游标
cur.close() # 释放游标
关闭连接
con.close() # 关闭连接
存储过程
cur.callproc("proc_name",("params",)) # 执行存储过程
cur.nextset() # 获取下一个数据集
相关错误类
from pymysql.err import Error
from pymysql.err import DataError
from pymysql.err import DatabaseError
from pymysql.err import MySQLError
from pymysql.err import ProgrammingError
from pymysql.err import IntegrityError
from pymysql.err import InterfaceError
from pymysql.err import InternalError
from pymysql.err import NotSupportedError
from pymysql.err import OperationalError
上下文管理器
# 自动提交的上下文管理器
with con:
cur = con.cursor()
cur.execute("insert into goods value('1','苹果','8.5)")
print(cur.fetchall())
with con.cursor() as cur:
cur.execute("insert into goods value('1','苹果','8.5)")
print(cur.fetchall())
连接
对象和游标
对象的上下文管理器
功能都是自动提交
,出现错误则自动回滚
。