如何离线安装和使用pymysql操作mysql数据库

news2024/11/18 15:24:50

一、应用背景

在企业内部网络要使用python操作mysql数据库。然而,python未自带访问MySQL数据库的函数库pymysql,需要另外安装。网上有很多安装pymysql都需要互联网支持。本文主要阐述如何离线安装pymysql,并简要介绍pymysql如何进行mysql操作。

pymysql是一个纯Python编写的MySQL数据库驱动,基于Python DB-API 2.0规范。它不仅支持Python 2.x版本,还支持Python 3.x版本,因此在使用时需要根据自己的Python版本选择合适的pymysql安装包。

二、环境准备

1.pymysql的版本。本文使用的Python版本是python 3.9,因此使用的pymysql的版本是0.9.3。

2.anaconda3的版本。本文的python运行环境是anaconda 2.3.1,python3.9。

3.IDE环境。本文采用anaconda自带的python IDE软件Spyder 5.2.2。

4.mysql的版本。MySQL版本是5.7,由wampserver 2.5提供,如果要使用mysql8.1版本,可以参考文章MySql数据库5.7升级到8.1遇到的问题与解决方案_wamp升级mysql_hongdi的博客-CSDN博客

三、pymsql的安装

1.下载pymsql安装包

下载地址:https://mirrors.cloud.tencent.com/pypi/packages/da/15/23ba6592920e21cb40eb0fe0ea002d2b6177beb1ca8a4c1add5a8f32754d/PyMySQL-0.9.3.tar.gz#sha256=d8c059dcd81dedb85a9f034d5e22dcb4442c0b201908bede99e306d65ea7c8e7

这里也提供下其他版本的下载地址:

PyMySQL-1.0.0.tar.gzicon-default.png?t=N7T8https://mirrors.cloud.tencent.com/pypi/packages/2b/c4/3c3e7e598b1b490a2525068c22f397fda13f48623b7bd54fb209cd0ab774/PyMySQL-1.0.0.tar.gz#sha256=b2508a7dc6b626210e52f711d2c2361d102d8d9b8b144e63b2512e748de1a49b

PyMySQL-1.1.0.tar.gzicon-default.png?t=N7T8https://mirrors.cloud.tencent.com/pypi/packages/41/9d/ee68dee1c8821c839bb31e6e5f40e61035a5278f7c1307dde758f0c90452/PyMySQL-1.1.0.tar.gz#sha256=4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96 2.安装pyMySQL

(1)将pymsql-0.9.3.tar.gz解压到anaconda安装目录下,假设是E:\Anaconda3

(2)打开cmd命令行界面,切换到E:\Anaconda3,然后输入命令python setup.py install

(3)测试是否安装成功。在命令行中进入Python解释器,输入命令>>>import pymysql回车,不报错的化,基本可以认为pymsql安装成功。

四、pymysql的开发介绍

(一)pymysql的编码流程

 1.建立数据库连接 db = pymysql.connect(参数)
        connect()函数的参数:host=主机地址或本地localhost,port=端口号(默认3306),
                                             user=用户名,password=密码,

                                             database=数据库,charaset=编码方式(默认utf8)
  2.创建游标对象 cur = db.cursor()
  3.通过游标执行方法 cur.execute("sql语句")
  4.提交到数据库  db.commit()  
  5.关闭游标对象  cur.close()
  6.关闭数据库连接   db.close()

(二)pymysql中的查询

pymysql的增、删、改就比较简单,只要将相应的insert、delete、update语句放到cur.execute中执行即可。对于查的方面pymysql就提供几种方法:fetchone、fetchall、fetchmany,下面分别进行介绍:

1.fetchone方法

返回单条记录,即一个元组,如果没有数据,则返回None.如:

cur.execute("select col1,col2, from mytable where id=1");

arr=cur.fetchone()

#通过arr[0]和arr[1]可以访问col1和col2的值

print(arr[0],arr[1])

注意:多次循环使用cursor.fetchone(),依次取得下一条结果,直到为空。

2.fetchall方法

 返回多条记录,即多个元组,如果没有结果,则返回 (),代码如下

cur.execute("select col1,col2, from mytable ");

arrs = cur.fetchall()
for row in arrs:
    print(row)

3.fetchmany(n)方法

获取前n行数据,代码如下:

cur.execute("select col1,col2, from mytable ");

arr3 = cur.fetchmany(3) 获取前三行数据

(三)pymysql中占位符的使用

开发过程经常需要用到往sql语句中传递参数,最简单的做法的通过拼接字符串的方式,但这样的方式容易被进行sql注入攻击。所以在进行开发时,建议通过传递参数的方式进行开发。这里主要介绍几种方法。

假设需要往mytable表中添加记录

正常的SQL语句:sql = “insert into mytable (col1,col2) values (‘user1’,19),(‘user2’,20);”

1.占位符法:

sql = “insert into mytable (col1,col2) values (‘%s’,%f),(‘%s’,%f);”

为了保持与sql语句格式完全匹配,需要编写如下语句:

sql = “insert into mytable (col1,col2) values (‘%s’,%f),(‘%s’,%f);”%('user1',19,'user2',20)

注意:此种方式需要对字符串占位符加单引号'%s'

2.参数传递法:

sql = “insert into mytable (col1,col2) values (‘%s’,%f),(‘%s’,%f);”

在execute方法中除了传递sql,还要传入对应参数列表,如下语句:

cur.execute(sql,['user1',19,'user2',20])
注意:这里的第二个参数,会按列表中的值顺次匹配

(四)完整的源码示例

import pymysql

db = pymysql.connect(host='localhost',
                     port=3306,
                     user='user',
                     password='pwd',
                     database='mydatabase',
                     charset='utf8')
cur = db.cursor()
sql = "INSERT INTO interest (col1,col2) VALUES ('%s',%f),('%s',%f);"
try:
    cur.execute(sql, ['user1',19,'user2',20])
    db.commit()
except Exception as e:
    db.rollback()
finally:
    cur.close()
    db.close()


 

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

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

相关文章

nodejs+vue中国非物质文化遗产网站设计与实现elementui

前端页面: 导航栏借鉴下面的 1首页:带有一个全屏轮播图和其他的内容 2咨询页:有关中国非物质文化遗产的一些新闻咨询网站对于记录非遗这种无形的、动态的文化资源有着其他技术无可替代的优势。用户可以在该网站浏览、了解和学习非遗文化&…

Unity3d中Scene场景2D模式下放大后UI元素后不显示的问题

如题:UI在game视图显示没有问题, 在Play状态下,在Sence视图查看UI对象的时候进行放大操作,然后UI就不显示了或者显示不全,缩小就恢复正常。这让我在Play模式下预览UI状态很麻烦。相关问题描述较少。 初步判定为摄像机…

河北吉力宝以步力宝健康鞋引发的全新生活生态商

在当今瞬息万变的商业世界中,成功企业通常都是那些不拘泥于传统、勇于创新的先锋之选。河北吉力宝正是这样一家企业,通过打造一双步力宝健康鞋,他们以功能性智能科技穿戴品为核心,成功创造了一种结合智能康养与时尚潮流的独特产品…

IDEA运行第一个Java简单程序(新建项目到运行类)

目录 前言 一、准备工作 JDK下载安装 1.IDEA下载安装 二、IDEA建立项目 (一)新建项目(银河系) (二)新建模块(地球) (三)新建包(国家&#…

【JVM】内存分区

内存分区 一. JVM 执行流程二. JVM 运行时数据区1. 堆(线程共享)2. Java虚拟机栈(线程私有)3. 本地方法栈(线程私有)4. 程序计数器(线程私有)5. 方法区(线程共享&#xf…

Unity:2D游戏设置相机orthographicSize

目录 根据设备分辨率动态设置相机 orthographicSize 根据设备分辨率动态设置相机 orthographicSize 2d游戏里面相机的Orthan.size确定的是高度,宽度是按照屏幕的宽高比计算出来的cameraWidthSize camera.Orthographic.size*(Screen.Width/Screen.height)我在游戏…

内网穿透--cpolar

工具介绍 cpolar是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网。使得公网用户可以正常访问内网服务。 下载位置 cpolar官网:cpolar - 安全的内网穿透工具 创建隧道映射 cpolar安装成功后,双击打开cpolar web u…

一文教你如何配置路由策略

【微|信|公|众|号:厦门微思网络】 微思-课程介绍 组网需求 如图1所示,某公司的部门A和部门B相距较远,Router_1和Router_6分别作为这两个部门的出口设备,AS 100内部使用OSPF作为IGP。现要求: 通过部署BGP,使…

实验三--贪心算法的设计与分析

某不知名学校算法课第三次实验报告 题目来自力扣 这次实验是贪心算法 贪心的思维很跳跃,每道题也没有固定的模板的思考方向 跳跃游戏 题目描述: 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳…

PHP 电竞网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 电竞网站系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php电竞网站系统 代码 https://download.csdn.net/download/qq_41221322/88377255 论文 h…

基于linux的进程信号知识

1.前言 生活当中我们无时不刻都在接触外界给予我们各种各样的信号,比如穿越马路时看到红灯就得停下来,在比如听到手机铃声就得接电话,那么生活中如果很多重要的信号同时发生了,你会先做哪个事情?换句化说你会如何处理…

Failed to load the JNI shared library “D:\...\jvm.dll

1.解决办法: 64-bit Eclipse requires a 64-bit JVM, and 32-bit Eclipse requires 32-bit JVM--you can not mix-and-match between 32-bit and 64-bit. 2.问题: 下载了Eclipse4.16,openjdk8,双击安装Eclipse无法启动&#x…

侯捷 C++ STL标准库和泛型编程 —— 3 容器(序列式容器)

3 容器 3.1 容器结构分类 分类:序列式容器 Sequence Container,关联式容器 Associative Container 序列式容器:按照放入的次序进行排列 Array 数组,固定大小Vector 向量,会自动扩充大小Deque 双向队列,双…

每日一题 1333. 餐厅过滤器(中等)

感觉应该算是简单题 思路: 按照他提出的要求进行筛选即可学习了 sort 函数中几个参数的用法, keylambda c:(c[1], c[0]) 的形式可以令在排序中当c[1]相等时按照c[0]大小进行排序,reverseTrue 实现降序排列 class Solution:def filterResta…

基于微信小程序的美食推荐系统设计与实现(源码+lw+部署文档+讲解等)

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…

element日历插件获取显示的第一天和最后一天

和重置日期内容显示 需求是要传入当前显示的第一天和最后一天来获取范围,再判断某个日期是否有内容标记 已知星期排版是固定的,第一天是星期天,最后一天是星期六。通过当月1号和最后一天再往前推算需要展示上个月几天,和下个月几…

Vue3 + TS 自动检测线上环境 —— 版本热更新提醒

🐔 前期回顾 编写 loading、加密解密 发布NPM依赖包,并实施落地使用_彩色之外的博客-CSDN博客 目录 🌍 问题产生 🤖 性能效率 🪂 新建 autoUpdate.ts 🎋 在App.vue使用 🌍 问题产生 当用…

秋招搞个保底offer再说,我换赛道了。

作者:阿秀 InterviewGuide大厂面试真题网站:https://top.interviewguide.cn 这是阿秀的第「312」篇原创 小伙伴们大家好,我是阿秀。 转测开这个话题已经聊过很多次了,以前也分享过不少测开相关的面经: 后端太卷&#x…

Mac电脑视频处理工具 Topaz Video AI for mac

Topaz Video AI是一款强大而易用的视频处理软件,通过人工智能技术提供高质量的视频增强和编辑功能。它可以帮助用户改善视频的质量、修复缺陷、优化图像,并提供丰富的编辑选项,以满足个性化的视频处理需求。无论是专业摄影师、视频编辑人员&a…

vue+Vant,关闭Popup弹框,遮罩层并没有消失

遇到问题&#xff1a; 点击Popup弹框关闭按钮&#xff0c;弹框的遮罩不能正常关闭&#xff0c;如下图。经研究&#xff0c;排除了popup属性问题&#xff0c;最后只能删除代码排除法。 <!--弹框&#xff1a;选号--><van-popupv-model"showNumber"closeablero…