pymysql 库 - python 操作 mysql

环境: Win10 x64 + Python 3.7 + PyMySQL  1.0.2 + MySQL 8.0.27

1 安装

pip install pymysql

2 地址

https://pypi.org/project/pymysql/

3.1 数据库版本查询 (search_version.py)


import pymysql# 打开数据库连接
try:db = pymysql.connect(host='localhost', user='root', passwd='123456', port=3306)print('连接成功!')
except:print('something wrong!')# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()# 使用 execute()  方法执行 SQL 查询
cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法获取单条数据.fetchone只返回一维元组
data = cursor.fetchone()
print(type(data))
print(data)
print("Database version : %s " % data)# 关闭数据库连接
db.close()'''
连接成功!
<class 'tuple'>
('8.0.27',)
Database version : 8.0.27 
'''

3.2 创建表 (create_table.py)


import pymysql# 打开数据库连接
try:db = pymysql.connect(host='localhost', user='root', passwd='123456', port=3306, db='db_jupiter')print('连接成功!')
except:print('something wrong!')# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")# 使用预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (ID INT NOT NULL AUTO_INCREMENT,FIRST_NAME  CHAR(20) NOT NULL COMMENT '名字',LAST_NAME  CHAR(20),AGE INT COMMENT '年龄',  SEX CHAR(1) COMMENT '性别',INCOME FLOAT NOT NULL COMMENT '收入',PRIMARY KEY (ID))"""cursor.execute(sql)
print('建表成功!')# 关闭数据库连接
db.close()'''
连接成功!
建表成功!
'''

3.3 插入数据 (insert_update_delete_table.py)


import pymysql# 打开数据库连接
try:db = pymysql.connect(host='localhost', user='root', passwd='123456', port=3306, db='db_jupiter')print('连接成功!')
except:print('something wrong!')# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()# SQL 插入语句
# sql = """INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, INCOME) VALUES ('Qin', 'DeXu', 20, 'M', 2000)"""
# sql = """INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, INCOME) VALUES ('Li', 'Xiaofei', 20, 'F', 3000)"""
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, INCOME) VALUES ('Wang', 'HanYu', 20, 'M', 5000)"""# SQL 更新语句
# sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')# SQL 删除语句
# sql = "DELETE FROM EMPLOYEE WHERE AGE > %d" % (20)try:# 执行sql语句cursor.execute(sql)# 提交到数据库执行db.commit()print('数据插入成功!')
except:# 如果发生错误则回滚db.rollback()print('数据插入错误!')# 关闭数据库连接
db.close()'''
连接成功!
数据插入成功!
'''

3.4 批量插入数据 (insert_table_many.py)


import pymysql# 打开数据库连接
try:db = pymysql.connect(host='localhost', user='root', passwd='123456', port=3306, db='db_jupiter')print('连接成功!')
except:print('something wrong!')# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()# SQL 插入语句
data = [('DongFang', 'YuXiao', 25, 'M', 2000.30),('OuYang', 'HeHe', 22, 'F', 2000),('GongSun', 'Sheng', 23, 'M', 2000)
]stmt = "INSERT INTO EMPLOYEE (FIRST_NAME,LAST_NAME, AGE, SEX, INCOME) VALUES (%s, %s, %s, %s, %s)"try:# 执行sql语句cursor.executemany(stmt, data)# 提交到数据库执行db.commit()print('数据插入成功!')
except:# 如果发生错误则回滚db.rollback()print('数据插入错误!')# 关闭数据库连接
db.close()'''
连接成功!
数据插入成功!
''''''
说明:
占位符 %s 改成 %d ,报错。
'''

3.5 查询数据 (search_table.py)


import pymysql# 打开数据库连接
try:db = pymysql.connect(host='localhost', user='root', passwd='123456', port=3306, db='db_jupiter')print('连接成功!')
except:print('something wrong!')# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE WHERE INCOME >= %s" % (3000)try:# 执行SQL语句cursor.execute(sql)# rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。row_count = cursor.rowcountprint(type(row_count))print(row_count)# fetchall(): 接收全部的返回结果行, 获取所有记录列表 fetchall返回二维元组(元组中含有元组)results = cursor.fetchall()print(type(results))print(results)for row in results:id = row[0]fname = row[1]lname = row[2]age = row[3]sex = row[4]income = row[5]# 打印结果print('数据查询成功!')print("id=%s, fname=%s, lname=%s, age=%s, sex=%s, income=%s" % (id, fname, lname, age, sex, income))
except:print("Error: unable to fetch data")# 关闭数据库连接
db.close()'''
连接成功!
<class 'int'>
2
<class 'tuple'>
((2, 'Li', 'Xiaofei', 20, 'F', 3000.0), (3, 'Wang', 'HanYu', 20, 'M', 5000.0))
数据查询成功!
id=2, fname=Li, lname=Xiaofei, age=20, sex=F, income=3000.0
数据查询成功!
id=3, fname=Wang, lname=HanYu, age=20, sex=M, income=5000.0
'''

其他情况:
executemany()方法要求传入的参数是元组嵌套的列表,列表中每个元组代表一组数据,而元组中的每个值则代表一个数据的字段值。

####################################
批量插入1:
data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]

stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)

INSERT INTO employees (first_name, hire_date)
VALUES ('Jane', '2005-02-12'), ('Joe', '2006-05-23'), ('John', '2010-10-03')

####################################
批量插入2:
# 定义 SQL 语句
insert_sql = "INSERT INTO person VALUES (%s, %s, %s)"

# 定义数据
data = [
    ('1', '张三', 18),
    ('2', '李四', 19),
    ('3', '王五', 20)
]
# 批量插入数据
cursor.executemany(insert_sql, data)

批量删除3:
# 定义 SQL 语句
delete_sql = "DELETE FROM  WHERE id = %s"
# 定义数据
ids = [(1,), (2,), (3,)]
# 批量删除数据
cursor.executemany(delete_sql, ids)


参考链接:
https://zhuanlan.zhihu.com/p/397765212
http://www.xoxxoo.com/index/index/article/id/288
https://blog.csdn.net/m0_48300767/article/details/131063781
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python安装第三方包时报错:...\lib\site-packages\pip\_vendor\urllib3\response.py...

安装redis第三方包&#xff1a; pip install redis报错现象&#xff1a; 解决方法&#xff1a;使用以下命令可成功安装 pip install redis -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

关于网络入侵检测领域使用Spark/Flink等计算框架做分布式

关于网络入侵检测领域使用Spark/Flink等计算框架做分布式 0、引言1 基于LightGBM的网络入侵检测研究2 基于互信息法的智能化运维系统入侵检测Spark实现3 基于Spark的车联网分布式组合深度学习入侵检测方法4 基于Flink的分布式在线集成学习框架研究5 基于Flink的分布式并行逻辑回…

mongodb基础

mongodb语法 参考文档&#xff1a;https://docs.mongodb.com/manual/reference/ BSON Types BSON Type有2种标识符&#xff0c;整形和字符串 类型数值字符串说明Double1“double”String2“string”Object3“object”Array4“array”Binary data5“binData”Undefined6“un…

8.9黄金最新行情走势分析及短线交易策略

近期有哪些消息面影响黄金走势&#xff1f;黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周三&#xff08;8月9日&#xff09;现货黄金维持震荡&#xff0c;目前交投于1930美元附近&#xff0c;隔日现货黄金盘中震荡下行&#xff0c;失守1930关口并在美盘时段…

【Spring】-Spring的IoC和DI

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【Framework】 主要内容&#xff1a;什么是spring&#xff1f;IoC容器是什么&#xff1f;如何使代码解耦合&#xff1f;IoC的核心原理&#xff0c;IoC的优点。依赖注入/对象装配/…

【ARM 嵌入式 编译系列 10 -- GCC 编译缩减可执行文件 elf 文件大小】

文章目录 GCC 如何缩减可执行文件size测试代码 上篇文章&#xff1a;ARM 嵌入式 编译系列 9-- GCC 编译符号表&#xff08;Symbol Table&#xff09;的详细介绍 下篇文章&#xff1a;ARM 嵌入式 编译系列 10.1 – GCC 编译缩减可执行文件 elf 文件大小 GCC 如何缩减可执行文件s…

Linux下在qtcreator中创建qt程序

目录 1、新建项目 2、单工程项目创建 3、多工程项目创建 4、添加子工程&#xff08;基于多工程目录结构&#xff09; 5、 .pro文件 1、新建项目 切换到“编辑”界面&#xff0c;点击菜单栏中的“文件”-“新建文件或项目” 2、单工程项目创建 只有一个工程的项目&#…

Axure RP移动端高保真CRM办公客户管理系统原型模板及元件库

Axure RP移动端高保真CRM办公客户管理系统原型模板及元件库&#xff0c;一套典型的移动端办公工具型APP Axure RP原型模板&#xff0c;可根据实际的产品需求进行扩展&#xff0c;也可以作为移动端原型设计的参考案例。为提升本作品参考价值&#xff0c;在模板设计过程中尽量追求…

chatGPT应用于房地产行业

作为 2023 年的房地产专业人士&#xff0c;您无疑认识到技术对行业的重大影响。近年来&#xff0c;一项技术进步席卷了世界——人工智能。人工智能彻底改变了房地产业务的各个方面&#xff0c;从简化管理任务到增强客户互动。 在本文中&#xff0c;我们将探讨几种巧妙的人工智…

HTML 语言简介

1.概述 HTML 是网页使用的语言&#xff0c;定义了网页的结构和内容。浏览器访问网站&#xff0c;其实就是从服务器下载 HTML 代码&#xff0c;然后渲染出网页。 HTML 的全名是“超文本标记语言”&#xff08;HyperText Markup Language&#xff09;&#xff0c;上个世纪90年代…

zabbix自动注册服务器以及部署代理服务器

文章目录 Zabbix自动注册服务器及部署代理服务器一.zabbix自动注册1.什么是自动注册2.环境准备3.zabbix客户端配置4.在 Web 页面配置自动注册5.验证自动注册 二.部署 zabbix 代理服务器1.分布式监控的作用&#xff1a;2.环境部署3.代理服务器配置4.客户端配置5.web页面配置5.1 …

MS9940T 国产 模拟前端AFE芯片 11-15 节锂电池或磷酸盐电池管理芯片 替代BQ76940

产品简述 MS9940T 是模拟前端 (AFE) 芯片&#xff0c;支持11 到 15 组电池串联。通过 I 2 C &#xff0c;主机控制器 可以使用 MS9940T 来实现电池组管理功能&#xff0c;例如监控&#xff08;电池电压、电池组电流、电池组 温度&#xff09;、保护&#xff08;控制…

分类预测 | MATLAB实现GWO-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现GWO-BiLSTM-Attention多输入分类预测 目录 分类预测 | MATLAB实现GWO-BiLSTM-Attention多输入分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.GWO-BiLSTM-Attention 数据分类预测程序 2.代码说明&#xff1a;基于灰狼优化算法&#xff08…

vuejs 设计与实现 - 组件的实现原理

1.渲染组件 如果是组件则&#xff1a;vnode .type的值是一个对象。如下&#xff1a; const vnode {type: MyComponent,}为了让渲染器能处理组件类型的虚拟节点&#xff0c;我们还需要在patch函数中对组件类型的虚拟节点进行处理&#xff0c;如下&#xff1a; function patc…

CentOS7.9 禁用22端口,使用其他端口替代

文章目录 业务场景操作步骤修改sshd配置文件修改SELinux开放给ssh使用的端口修改防火墙&#xff0c;开放新端口重启sshd生效 相关知识点介绍sshd服务SELinux服务firewall.service服务 业务场景 我们在某市实施交通信控平台项目&#xff0c;我们申请了一台服务器&#xff0c;用…

学习Vue:列表渲染(v-for)

在 Vue.js 中&#xff0c;实现动态列表的显示是非常常见的需求。为了达到这个目的&#xff0c;Vue 提供了 v-for 指令&#xff0c;它允许您迭代一个数组或对象&#xff0c;将其元素渲染为列表。然而&#xff0c;在使用 v-for 时&#xff0c;key 属性的设置也非常重要&#xff0…

微信小程序(原生)搜索功能实现

一、效果图 二、代码 wxml <van-searchvalue"{{ keyword }}"shape"round"background"#000"placeholder"请输入关键词"use-action-slotbind:change"onChange"bind:search"onSearch"bind:clear"onClear&q…

实践-CNN卷积层

实践-CNN卷积层 1 卷积层构造2 整体流程3 BatchNormalization效果4 参数对比5 测试效果 1 卷积层构造 2 整体流程 根据网络结构来写就可以了。 池化 拉平 训练一个网络需要2-3天的时间。用经典网络来&#xff0c;一些细节没有必要去扣。 损失函数&#xff1a; fit模型&…

运维监控学习笔记1

1、监控对象&#xff1a; 1、监控对象的理解&#xff1b;CPU是怎么工作的&#xff1b; 2、监控对象的指标&#xff1a;CPU使用率&#xff1b;上下文切换&#xff1b; 3、确定性能基准线&#xff1a;CPU负载多少才算高&#xff1b; 2、监控范围&#xff1a; 1、硬件监控&#x…

线性扫描寄存器分配算法介绍

线性扫描寄存器分配 文章目录 线性扫描寄存器分配1. 算法介绍2. 相关概念3. 算法的实现3.1 伪代码3.2 图示 参考文献 论文地址&#xff1a; Linear Scan Register Allocation ​ 我们描述了一种称为线性扫描的快速全局寄存器分配的新算法。该算法不基于图形着色&#xff0c;而…