一、应用背景

在企业内部网络要使用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.gz如何离线安装和使用pymysql操作mysql数据库-LMLPHPhttps://mirrors.cloud.tencent.com/pypi/packages/2b/c4/3c3e7e598b1b490a2525068c22f397fda13f48623b7bd54fb209cd0ab774/PyMySQL-1.0.0.tar.gz#sha256=b2508a7dc6b626210e52f711d2c2361d102d8d9b8b144e63b2512e748de1a49b

PyMySQL-1.1.0.tar.gz如何离线安装和使用pymysql操作mysql数据库-LMLPHPhttps://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()


 

09-28 22:08