码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何离线安装和使用pymysql操作mysql数据库


    一、应用背景

    在企业内部网络要使用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])
    注意:这里的第二个参数,会按列表中的值顺次匹配

    (四)完整的源码示例

    1. import pymysql
    2. db = pymysql.connect(host='localhost',
    3. port=3306,
    4. user='user',
    5. password='pwd',
    6. database='mydatabase',
    7. charset='utf8')
    8. cur = db.cursor()
    9. sql = "INSERT INTO interest (col1,col2) VALUES ('%s',%f),('%s',%f);"
    10. try:
    11. cur.execute(sql, ['user1',19,'user2',20])
    12. db.commit()
    13. except Exception as e:
    14. db.rollback()
    15. finally:
    16. cur.close()
    17. db.close()


     

  • 相关阅读:
    ObjectProvider学习
    钉钉7.5版本多项产品升级,打造年轻人爱用的AI工具
    QString格式化
    【信号去噪】基于遗传算法优化VMD实现信号去噪附matlab代码
    nginx转发apache,跳转丢失端口,直接带的是apache的端口
    C++常用的音频工具库
    工厂无线wifi短信验证码认证方案
    【高性能计算】NCNN源码解析笔记之
    【C++】STL-常用算法-常用查找算法
    【Java成王之路】EE初阶第二十四篇: Servlet
  • 原文地址:https://blog.csdn.net/hongdi/article/details/133300253
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号