pymysql使用指南

1 引言

mysql应该说是如今使用最为普遍的数据库了,没有之一,而python作为最为流行的语言之一,自然少不了与mysql打交道,pymysql就是使用最多的工具库了。

2 创建库、表

我们先从创建数据库、数据表说起,有了库表,后面的增删改查才有根据。

2.1 创建数据库

pymysql的所有对数据库的操作都必须先与数据库服务建立连接,然后创建游标为基础执行具体的sql语句。创建数据库方法如下:

代码语言:javascript代码运行次数:0运行复制

# -*- coding: utf-8 -*-import pymysql conn = pymysql.connect( # 创建数据库连接    host='10.10.11.131', # 要连接的数据库所在主机ip    user='chb', # 数据库登录用户名    password='123456!', # 登录用户密码    charset='utf8' # 编码,注意不能写成utf-8)cursor = con.cursor()cursor .execute("create database test_db character set utf8;")# 执行完之后别忘了关闭游标和数据库连接cursor.close()conn.close()

上面代码执行完后,就创建了一个名为test_db的数据库:

pymysql使用指南

2.2 创建数据表代码语言:javascript代码运行次数:0运行复制

# -*- coding: utf-8 -*-import pymysql conn = pymysql.connect( # 创建数据库连接    host='10.10.11.131', # 要连接的数据库所在主机ip    user='chb', # 数据库登录用户名    password='123456!', # 登录用户密码    database='test_db', # 连接的数据库名,也可以后续通过cursor.execture('user test_db')指定    charset='utf8' # 编码,注意不能写成utf-8) cursor = conn.cursor() # 创建一个游标 # 需要执行的创建表的sql语句sql = """create table book(bookid int auto_increment primary key ,bookname VARCHAR(255) not null ,authors VARCHAR(255) not null ,year_publication YEAR not null);""" cursor.execute(sql) # 使用游标执行sql # 执行完之后别忘了关闭游标和数据库连接cursor.close()conn.close()
pymysql使用指南

在这个创建数据表的例子中,在创建数据库服务连接时,我们通过 database=’test_db’这行代码指定参数连接了目标数据库,如果不想在创建数据库服务连接时指定数据库,可以在后续通过cursor.execture(‘user test_db’)这种方法指定数据库。

从上面创建数据库和数据表的例子可以看出,pymysql执行具体操作时都是先创建数据库服务连接,然后通过连接创建游标,以游标来执行具体的sql语句来完成具体的对数据库操作。不单单可以创建数据库、数据表,还可以创建索引、视图等等,方法也是一样的,这里不再介绍。

 3 增删改查3.1 插入

插入操作可以通过游标的execute和executemany两个方法来完成。注意:只要是对数据表有修改的操作(插入、更新、删除)在使用execute方法后,都需要再次调用commit方法对数据库的修改才会最终生效。

execute方法一次插入一条记录,executemany一次插入多条记录:

(1)execute:一次插入一条记录

代码语言:javascript代码运行次数:0运行复制

cursor.execute('insert into book(bookname, authors, year_publication) values("%s", "%s", %s);' % ('Python从入门到放弃', '乔布斯', 2019))conn.commit()
pymysql使用指南

上面这种写法是先用字符串利用%s占位生成一条完整的sql语句,然后去执行。其实,pymysql的游标也自带这一功能,而且看起来更加方便,所以,我们还可以这样执行execute方法:

代码语言:javascript代码运行次数:0运行复制

cursor.execute('insert into book(bookname, authors, year_publication) values(%s, %s, %s);', ('Python从入门到放弃', '乔布斯', 2019))conn.commit()
pymysql使用指南

这种方法的好处是sql语句中的%s不需要加引号(如果加了引号,引号也会被当做数据插入到数据表中),游标执行这一语句时,会根据数据类型来判断是否要加上引号。

(2)executemany:一次插入多条记录

代码语言:javascript代码运行次数:0运行复制

data = [    ('21天完全入门Java', '扎克伯格', 2018),    ('Linux学习手册', '李纳斯', 2017),    ('MySQL从删库到跑路', '比尔盖茨', 2018),]cursor.executemany('insert into book(bookname, authors, year_publication) values("%s", "%s", %s);', data)conn.commit()
pymysql使用指南

3.2 更新代码语言:javascript代码运行次数:0运行复制

cursor.execute('update book set authors=%s where bookname=%s;', ["马云", "Python从入门到放弃"])conn.commit()
pymysql使用指南

3.3 查询

查询是最最要但也是最复杂的一个操作了。我们分为fetch操作、游标两部分来说。

(1)fetch操作

插入、更新、删除操作必须再执行commit操作之后才会生效,而查询操作也只有在执行fetch操作之后才会生效。fetch操作包括3个方法,分别是fetchone()、fetchall()、fetchmany()。

fetchall():查询指定的所有记录代码语言:javascript代码运行次数:0运行复制

cursor.execute('select * from book where bookid < %s;', [4])books = cursor.fetchall()print(books)

输出结果为:

((1, ‘Python从入门到放弃’, ‘马云’, 2019), (2, ‘Python从入门到放弃’, ‘马云’, 2019), (3, ’21天完全入门Java’, ‘扎克伯格’, 2018))

输出结果是以元组的形式来保存,且每一条记录也是一个元素,这是由游标cursor决定的,在下文中还会说到。

fetchmany(size):查询指定数量的记录代码语言:javascript代码运行次数:0运行复制

cursor.execute('select * from book where bookid < %s;', [4])books = cursor.fetchmany(2)print(books)

输出结果为:

((1, ‘Python从入门到放弃’, ‘马云’, 2019), (2, ‘Python从入门到放弃’, ‘马云’, 2019))

可以看出,fetchmany(size)是取出符合查询条件的最前面的指定数量记录。这里的size指的就是想要取出的记录条数。

fetchone():取出第一条记录代码语言:javascript代码运行次数:0运行复制

cursor.execute('select * from book where bookid < %s;', [4])books = cursor.fetchone()print(books)

输出结果:

(1, ‘Python从入门到放弃’, ‘马云’, 2019)

AppMall应用商店 AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店 56 查看详情 AppMall应用商店

fetchone()相当于是fetchmany(1),取出第一条符合查询条件的记录。

(2)游标

我们之前使用游标都是采用默认的Cursor类型,除此以外,pymysql还提供了DictCursor、SSCursor、SSDictCursor这几类游标。

DictCursor

之前使用的Cursor返回的数据是以元组的方式保存,而DictCursor是以字典的形式保存。创建这种类型的游标方法也很简单,在conn.sursor()方法中传入DictCursor这个类即可:

代码语言:javascript代码运行次数:0运行复制

cursor = conn.cursor(pymysql.cursors.DictCursor) # 创建一个字典游标cursor.execute('select * from book where bookid < %s;', [3])books = cursor.fetchall()print(books)cursor.execute('select * from book where bookid < %s;', [3])book_one = cursor.fetchone()print(book_one)

输出结果如下:

[{‘bookid’: 1, ‘bookname’: ‘Python从入门到放弃’, ‘authors’: ‘马云’, ‘year_publication’: 2019}, {‘bookid’: 2, ‘bookname’: ‘Python从入门到放弃’, ‘authors’: ‘马云’, ‘year_publication’: 2019}]

{‘bookid’: 1, ‘bookname’: ‘Python从入门到放弃’, ‘authors’: ‘马云’, ‘year_publication’: 2019}

SSCursor和SSDictCursor

SSCursor和SSDictCursor被称为流式游标,这类游标不会像上面使用的Cursor和DictCursor那样,一次性返回所有的数据,流式游标会陆陆续续一条一条得返回查询数据,所以这类游标适用于内存低、网络带宽小、数据量大的应用场景中。

流式游标的使用方法类似于迭代器,再循环中每取一条,生成一条:

代码语言:javascript代码运行次数:0运行复制

cursor = conn.cursor(pymysql.cursors.SSCursor) # 创建一个流式游标cursor.execute('select * from book;')book = cursor.fetchone()while book:print(book)book = cursor.fetchone()

输出结果如下:

(1, ‘Python从入门到放弃’, ‘马云’, 2019)

(2, ‘Python从入门到放弃’, ‘马云’, 2019)

(3, ’21天完全入门Java’, ‘扎克伯格’, 2018)

(4, ‘Linux学习手册’, ‘李纳斯’, 2017)

(5, ‘MySQL从删库到跑路’, ‘比尔盖茨’, 2018)

注意:流式游标虽然也有fetchall()方法,调用后的结果与普通游标一样返回所有数据,但是最好别去调用,这样会失去流式游标的优势。使用流式游标时,如果数据量很大,导致游标一直处在循环遍历状态,这时,数据库连接(conn)是被占用的,不能再被用于执行其他sql,如果要执行其他sql那就必须再创建一个数据库连接,游标占用数据库连接的时长是有限制的,如果流式游标一直在遍历,60秒后数据库连接会断开,不过可以在创建数据库连接时传入参数init_command=(“SET NET_WRITE_TIMEOUT=XX”)来设置这个超时时间。

SSCursor与SSDictCursor的区别就类似于Cursor和DictCursor的区别,这里就不在介绍了。

3.4 删除

使用pymysql执行插入、更新、删除操作都是相似的,最后都需要commit提交:

代码语言:javascript代码运行次数:0运行复制

cursor.execute('delete from book where bookid=%s;', [1])conn.commit()

这时候,bookid为1的记录已经被删除,如下图所示:

pymysql使用指南

也可以使用executemany()一次性删除多条:

代码语言:javascript代码运行次数:0运行复制

cursor.executemany('delete from book where bookid=%s;', [[2], [4]])conn.commit()

如下图所示,bookid为2和4的记录已经被删除:

pymysql使用指南

 4 总结

pymysql还提供了事务机制,但我还有疑问没搞清楚,不敢往博客上面写:执行多个修改数据库操作(多个execute方法)时,其中有一个方法有异常,这是commit,所有的所有都不会成功,那么为什么还要rollback呢?如果哪位前辈知道答案,请一定告知,感激不尽!

以上就是pymysql使用指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/299447.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 00:14:46
下一篇 2025年11月5日 00:17:11

相关推荐

  • 比特币的涨跌在哪里看呢 比特币行情走势观测软件汇总

    对于关注数字资产市场的人来说,实时掌握比特币等主流品种的价格波动至关重要。本文将汇总几个主流且功能强大的行情观测工具与网站,帮助您轻松获取精准的市场数据和走势分析。 比特币主流交易平台推荐 1、币安binance: 2、欧易OKX: 3、火币HTX: 4、大门Gate.io: 一、专业图表分析工具:…

    2025年12月11日
    000
  • 一文搞懂币圈现货交易和合约交易有什么区别?

    在数字货币的交易世界里,投资者们经常接触到两种主流的交易方式:现货交易与合约交易。这两种方式在交易逻辑、风险收益特征以及操作策略上存在显著的差异,理解它们之间的不同,是参与市场交易的基础。它们服务于不同风险偏好和交易目标的群体,构成了加密市场完整的交易生态。 2025主流数字货币交易所: 1、欧易O…

    2025年12月11日
    000
  • 币安binance官网入口 – 正规虚拟货币交易所

    欢迎来到币安(binance),全球领先的虚拟货币交易所。作为行业内公认的正规、安全平台,我们致力于为用户提供稳定可靠的数字资产交易服务。本文将作为您的官方入口指南,详细介绍如何快速、安全地注册币安账户并进行关键安全设置,开启您的数字货币之旅。 币安官网直达: 币安官方app: 第一步:创建您的币安…

    2025年12月11日 好文分享
    000
  • 什么是NFT?如何创建和交易?

    NFT,全称为非同质化代币(Non-Fungible Token),是一种记录在区块链上的独特数字资产。理解它的关键在于“非同质化”这个概念。生活中的“同质化”物品,比如同一面额的货币,每一张的价值都是相等的,可以相互替换。 2025主流nft交易所: 1、欧易OKX 注册入口: APP下载: 2、…

    2025年12月11日
    000
  • 如何理解加密货币的市场市值和流通量?

    在加密货币的世界里,市场市值(Market Capitalization)和流通量(Circulating Supply)是两个核心指标,它们共同描绘了一个加密资产在市场中的规模和价值图景。理解这两个概念及其相互关系,对于评估一个加密项目的基本面至关重要。它们不是孤立的数字,而是动态变化的度量衡,反…

    2025年12月11日
    000
  • 什么是Gas费?如何计算和优化?

    Gas费是在区块链网络上执行交易或与智能合约交互时,用户需要支付给网络验证者(或矿工)的费用。这个概念在以太坊等支持智能合约的区块链上尤为核心。可以把它想象成在区块链这条高速公路上行驶时,你的车辆(交易)需要消耗的燃料(Gas)。 2025主流数字货币交易所: 1、欧易OKX 注册入口: APP下载…

    2025年12月11日
    000
  • 狗狗币领涨,比特币飙升至114,000美元,M2指标设定开启比特币追涨交易

    狗狗币(Dogecoin)以其惊人的涨幅再次成为焦点,引领了一波广泛的市场热情。与此同时,比特币(Bitcoin)的价格也实现了历史性的突破,一度飙升至令人瞩目的114,000美元高位。这一系列市场动态的背后,宏观经济指标的影响不容忽视,特别是广义货币供应量(M2)指标的持续增长,为市场注入了大量流…

    2025年12月11日
    000
  • 加密货币做市商是什么?一文明白做市机制、价差控制和盈利模式

    在复杂的加密货币交易世界中,做市商扮演着一个至关重要的角色。他们是市场的“润滑剂”,确保交易能够顺畅、高效地进行。简单来说,加密货币做市商是专业的交易实体或个人,通过在交易所持续提供买入和卖出报价,为市场创造流动性。他们的存在使得普通交易者在任何时候都能找到对手方,从而轻松地完成买卖操作,避免了因市…

    2025年12月11日
    000
  • 币圈恐慌与贪婪指数是什么?深入解读指标构成、使用方法和市场意义

    币圈恐慌与贪婪指数(Crypto Fear & Greed Index)是一个用来衡量加密货币市场整体情绪的指标。它的核心理念源自传统金融市场,即市场情绪在驱动投资者行为中扮演着关键角色。当市场普遍表现出极度恐惧时,可能意味着投资者过度担忧,资产价格被低估。 2025主流数字货币交易所: 1…

    2025年12月11日
    000
  • 区块链中的原子交换是什么?搞懂跨链交易原理、技术实现和限制条件

    区块链中的原子交换,英文为Atomic Swap,是一种允许两种不同加密货币在各自的区块链上进行点对点直接兑换的技术。它实现了资产交换的去信任化,整个过程不需要依赖任何中心化的第三方机构,例如加密货币交易所。这种交换的核心特性在于其“原子性”,意味着整个交易要么完全成功,要么完全失败,不存在一方发送…

    2025年12月11日
    000
  • 币圈KYC认证是什么?详解验证流程、隐私保护和必要性

    在数字资产的世界里,KYC是一个频繁被提及的术语。对于许多初入币圈的用户而言,这个概念可能显得陌生甚至有些繁琐。KYC的全称是“Know Your Customer”,直译为“了解你的客户”,它是一项源自传统金融行业的客户身份识别规定。 2025主流数字货币交易所: 1、欧易OKX 注册入口: AP…

    2025年12月11日
    000
  • 币圈社区治理是什么?搞懂代币投票、提案机制和参与方式

    在加密货币和区块链的世界里,社区治理是一个核心概念,它代表着项目决策权从中心化团队向分布式社区成员转移的过程。这套机制使得项目的发展方向、协议参数的修改以及资金的使用等重要事宜,不再由少数创始人或开发者决定,而是由整个社区通过一套预设的规则共同管理。这种模式是去中心化自治组织(DAO)得以运作的基石…

    2025年12月11日
    000
  • 加密货币期权交易是什么?全面解读合约类型、定价逻辑和策略组合

    加密货币期权是一种金融衍生品,它赋予持有者在未来某个特定日期或之前,以一个预先设定的价格(称为行权价格)买入或卖出特定数量的加密货币的权利,而非义务。与直接交易现货不同,期权交易的核心在于对未来价格波动的预期进行定价和交易。交易者可以通过支付一笔被称为“权利金”的费用来获取这种权利。这种工具为市场参…

    2025年12月11日
    000
  • 加密货币交易机器人是什么?全面了解自动化策略、API接入和风控设置

    加密货币交易机器人是一种自动化软件程序,旨在代表用户在加密货币交易所执行买卖操作。它通过预设的交易策略和规则,在没有人为干预的情况下,全天候不间断地监控市场并执行交易。这种工具的核心价值在于其能够克服人类交易者在情绪、纪律性和反应速度上的局限性,从而更严格地执行交易计划。 2025主流数字货币交易所…

    2025年12月11日
    000
  • 加密货币ETF是什么?一文读懂审批流程、资金机制与市场意义

    加密货币ETF,全称为加密货币交易所交易基金(Cryptocurrency Exchange-Traded Fund),是一种在传统证券交易所上市交易的金融产品。它的核心价值在于追踪一种或多种加密货币的价格表现。 2025主流数字货币交易所: 1、欧易OKX 注册入口: APP下载: 2、Binan…

    2025年12月11日
    000
  • 区块链分叉:硬分叉和软分叉如何区分?

    在区块链的世界中,网络升级和协议变更是维持其发展和适应性的必要过程。当社区成员对网络的未来发展方向或技术细节产生不同意见时,可能会导致区块链的“分叉”。分叉本质上是区块链协议的一次更新,它改变了原有的共识规则。根据新旧规则的兼容性,分叉被区分为两种主要类型:硬分叉和软分叉。这两种分叉在技术实现、网络…

    2025年12月11日
    000
  • mexc抹茶交易所 for Android v6.11.1 官方安卓版

    Mexc抹茶交易所是一款安全便捷的数字资产交易平台,支持多种主流数字货币交易。本文提供官方安卓版v6.11.1下载链接,并指导用户通过开启未知来源安装权限、下载APK文件、完成安装步骤及启用双重认证等操作顺利使用该应用。 其他主流货币交易平台推荐: 欧易OKX: Binance币安: 火币Huobi…

    2025年12月11日
    000
  • 区块链中的智能合约是什么?深入解析合约原理、编写方法和应用案例

    智能合约是一种部署在区块链上的计算机程序,它能够根据预设的规则自动执行、控制或记录法律意义上的事件和行为。这个概念可以通俗地理解为一个自动贩售机。当你向自动贩售机投入正确的金额并选择商品后,机器会自动验证条件(金额正确)并执行操作(掉落商品),整个过程无需人工干预。智能合约正是将这种自动化的、基于规…

    2025年12月11日
    000
  • 区块链共识机制是什么?一文搞懂POW、POS、DPOS的原理和区别

    区块链作为一个去中心化的分布式账本系统,其核心挑战在于如何在没有中心化权威机构的情况下,让网络中成千上万的节点对交易的有效性和账本的最终状态达成一致。为了解决这个问题,各种共识机制应运而生。共识机制本质上是一套规则和协议,它定义了节点如何验证交易、创建新区块,并确保所有节点维护一个统一、不可篡改的账…

    2025年12月11日
    000
  • 币圈杠杆交易是什么?深入解析杠杆原理、倍数选择和爆仓规则

    币圈杠杆交易是一种金融工具,它允许交易者使用借来的资金进行比其自有资本更大规模的交易。这种交易方式的核心在于“杠杆”效应,即通过借贷来放大潜在的投资回报。交易者只需投入一小部分资金作为保证金,就可以操控价值远超保证金的加密货币合约。这种机制既可能带来数倍于本金的收益,也可能导致同等倍数的亏损,甚至在…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信