【文档学习】pymysql

官方文档

创建连接

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())
  • 连接对象和游标对象的上下文管理器功能都是自动提交,出现错误则自动回滚
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pymysql和SQLAlchemy都是Python中常用的数据库操作库。pymysql是一个Python库,用于在Python中连接和操作MySQL数据库。SQLAlchemy是一个Python库,用于在Python中操作多种数据库,包括MySQL、PostgreSQL、Oracle等。两者各有优劣,具体使用哪个库需要根据项目需求和个人偏好来选择。 如果只需要连接和操作MySQL数据库,使用pymysql会更简单直接。pymysql相对来说比较轻量级,使用方便,而且它的文档和示例比较全面,上手相对简单。另外,pymysql与MySQL数据库的兼容性也比较好,支持MySQL的大多数特性。 如果需要同时支持多种数据库,使用SQLAlchemy会更加灵活。SQLAlchemy是一个ORM(对象关系映射)框架,可以将数据库表映射为Python类,通过Python类来操作数据库。SQLAlchemy不仅支持多种数据库,而且可以更方便地进行数据库操作,尤其是在复杂的业务逻辑下,使用SQLAlchemy可以更好地管理数据模型和关系。 综上所述,如果只需要连接和操作MySQL数据库,pymysql会更加适合,如果需要同时支持多种数据库,或者需要更加灵活的数据库操作,SQLAlchemy会更加适合。 ### 回答2: pymysql和sqlalchemy是两个功能强大的Python库,用于与MySQL数据库进行交互。下面我将从几个方面来评价它们的优点与适用场景。 1. 功能与灵活性:pymysql是一个纯Python库,提供了一套兼容Python DB-API的接口,可以方便地进行数据库的连接、查询和操作。它相对简单易用,适合小型项目或对数据库操作要求较简单的场景。而sqlalchemy是一个功能非常强大、可扩展性强的库,提供了多种ORM(对象关系映射)模式,能够对数据库表格进行更加高级和灵活的操作。如果需要复杂的数据库处理逻辑或想要使用ORM模式进行数据库操作,sqlalchemy会是更好的选择。 2. 性能和效率:pymysql是一个轻量级库,性能相对较好,适合对性能要求较高的场景。而sqlalchemy虽然功能强大,但其底层使用了较多的封装和抽象,因此在大数据量和高并发请求的情况下,性能可能会稍逊于pymysql。所以如果对性能要求较高,可以考虑使用pymysql。 3. 社区与生态环境:pymysql是一个相对成熟和稳定的库,有很多用户在使用和维护。而sqlalchemy则是一个非常活跃的开源项目,有庞大的社区支持和丰富的生态环境,提供了很多扩展模块和插件。如果你需要更多的功能扩展和第三方库支持,sqlalchemy会是更好的选择。 综上所述,选择pymysql还是sqlalchemy取决于具体的需求和项目规模。如果只是进行简单的数据库操作,并且对性能有较高要求,pymysql会更适合。而如果需要复杂的数据库操作,涉及到ORM模式、性能相对较次但功能更丰富的功能,那么sqlalchemy将是更好的选择。 ### 回答3: pymysql和sqlalchemy是两个在Python中常用的数据库连接库,它们分别有自己的特点和优势。 pymysql是一个纯Python编写的MySQL驱动,是实现MySQL数据库与Python语言之间的桥梁。它简单易用,操作起来比较直观,适合初学者使用。它支持大部分的MySQL功能,如事务、连接池和存储过程等。使用pymysql可以直接执行原生的SQL语句,也可以利用pymysql.cursors模块提供的游标操作数据库。但是,pymysql对数据库的抽象程度相对较低,需要手动编写SQL语句,对SQL的写法和效率要求较高。 而sqlalchemy是Python中一个强大的关系型数据库框架,它提供了一种高级的、面向对象的数据库操作方式,封装了底层数据库的连接和操作细节。它支持多种数据库,包括MySQL、SQLite、Oracle等,并提供了统一的API。sqlalchemy具有强大的查询功能,可以通过面向对象的方式进行数据库操作,使用更加灵活。同时,它支持ORM(对象关系映射),可以将数据库表映射为Python中的类和对象,实现了数据模型和代码的分离。但是,sqlalchemy相比pymysql更为复杂,需要学习和掌握更多的知识和概念。 总的来说,如果你对Python和MySQL已经比较熟悉,且只需要简单的数据库操作,那么pymysql可以满足你的需求。如果你需要更加灵活、强大的数据库操作,并且希望通过面向对象的方式来进行数据库编程,那么sqlalchemy会更适合你的需要。根据具体的需求和个人喜好,选择适合自己的库会更好用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值