Windows 10家庭中文版,MySQL 5.7.20 for Win 64,Python 3.6.4,PyMySQL 0.8.1,2018-05-08

----

使用Python访问MySQL数据库,自己写包?当然可以,但已经有一些很好用的包可以使用了,在PYPI可以找到。

通过搜索“mysql”关键字,找到了1000+的推荐,可是,要选择哪些呢?怎么选?打开各个包的页面可以找到一些

参考标准。不过,在搜索页面的首页没有看到PyMySQL包,在Order by下拉列表框中选择Date last updated,此

时可以看到PyMySQL排在第9位。~~怎么说呢,通过PYPI来找需要的包挺麻烦的,除非你熟悉所有Python包。

怎么办?怎么高效地找到最合适的包呢?百度!通过百度,你可以知道“大家”都在使用什么包在做什么工作,然

后,再去PYPI找相应的包,再决定是否使用它。

我这里为什么会使用PyMySQL包呢?因为我看到教程(菜鸟)里面提到了它,打开PyMySQL的页面后,发现其热

度还挺高的,在GitHub上有3930颗星星,再看了一些其它PyMySQL博文,发现其挺适合自己使用的,于是,就选

它了。

PyMySQL的首页

本文使用的PyMySQL版本是0.8.1,它Python 2.7和3.4及更高版本,支持版本号大于5.5的MySQL和MariaDB。

----

安装PyMySQL

pip3 install pymysql

安装完毕后,可以使用pip3 list查看到PyMySQL包已经安装了。

编写PyMySQL程序

说明,在编程之前看完PyMySQL的相关教程会避免一些陷阱。

按照PyMySQL的首页给出的Example,编写一个程序读取自己的数据库表(上一篇博文中介绍的数据库earth下的表area)。

其实,就是抄抄抄,抄完还不是完全懂,然后还是要读PyMySQL的文档、资料。

主要开发、测试工具:IDLE、Notepad++

代码如下:

 import pymysql.cursors

 # Connect to the database
conn = pymysql.connect(host='localhost',
user='root',
password='',
db='earth',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor) print(conn.get_server_info()) print(conn.get_host_info()) try:
with conn.cursor() as cursor:
# Create a new record
sql = "INSERT INTO area (name_cn, parent_id, name_en) VALUES (%s, %s, %s)"
cursor.execute(sql, ('中国', , 'China')) # conn is not autocommit by default.
# so you must commit to save these changes.
conn.commit() with conn.cursor() as cursor:
# read a single record
sql = "SELECT id, parent_id, name_cn, name_en, create_t, update_t FROM area"
cursor.execute(sql)
result = cursor.fetchone()
print(result) with conn.cursor() as cursor:
# read all records
sql = 'select id,parent_id,name_cn,name_en from area'
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
rid = row.get('id')
rpid = row.get('parent_id')
rcnn = row.get('name_cn')
renn = row.get('name_en') print("id = %d, pid = %d, name_cn = %s, name_en = %s" % \
(rid, rpid, rcnn, renn)) finally:
conn.close()

测试结果:

本代码执行了以下操作:

建立连接、获取数据库和主机信息、插入一条记录、读取一条记录、读取所有记录、关闭数据库连接。

注意1:

在插入数据时,sql语句中即便是要更换的数据类型是整数,其格式化字符串也必须上“%s”,否则,会出现错误。

因为这个问题,浪费了不少时间,最终查到一些网友也有同样的遭遇。

注意2:

使用IDLE编辑Python程序时,会出现很多错误,进而出现下面这些警告框并阻止程序执行:

此时,你在IDLE中看到的代码是完全没有问题的!你会很困惑!

怎么办?

使用其它工具(Notepad++、Eclipse)打开程序看看,此时你会发现程序的缩进等的确有问题,修改后再用IDLE打开,此时

问题就没有了,程序就可以正常运行了。

注意3:

获取查询到的一条记录里面的一个字段的数据无法使用row[1]得到,必须使用row.get(字段名),否则报错。

注意下图中左边的红框和右边的蓝框中的部分。

05-09更新:

上午看了参考链接1的文档,发现这个注意3出现的原因是,我在连接建立时使用了cursorclass=pymysql.cursors.DictCursor参数。

这会导致查询语句返回的结果是字典格式,而默认返回的是元组。

下图展示了取消参数后测试的结果:依次打印每一行

初次使用PyMySQL,请多关照,该好好看看它的文档了。

在其官方文档中,API Reference里面的两个对象Objects很重要:

参考链接:

1.https://www.cnblogs.com/wt11/p/6141225.html (博主推荐)

2.http://www.runoob.com/python3/python3-mysql.html

Python访问MySQL(1):初步使用PyMySQL包的更多相关文章

  1. python访问mysql和redis

    1. 修改mysql配置文件 修改bind-address=0.0.0.0(允许通过远程网络连接) 2. 修改redis配置文件 修改bind-address=0.0.0.0(允许通过远程网络连接), ...

  2. 利用Python访问Mysql数据库

    首先要明确一点,我们在Python中需要通过第三方库才能访问Mysql. 有这样几种方式:Mysql-python(即MySQLdb).pymysql.mysql-connector.Mysql-py ...

  3. python访问mysql

    1,下载mysql-connector-python-2.0.4  pythoin访问mysql需要有客户端,这个就是连接mysql的库 解压后如下图: 双击lib 以windows为例 把mysql ...

  4. Python访问MySQL数据库并实现其增删改查功能

    概述:对于访问MySQL数据库的操作,我想大家也都有一些了解.不过,因为最近在学习Python,以下就用Python来实现它.其中包括创建数据库和数据表.插入记录.删除记录.修改记录数据.查询数据.删 ...

  5. Python 42 mysql用户管理 、pymysql模块

    一:mysql用户管理 什么是mysql用户管理 mysql是一个tcp服务器,应用于操作服务器上的文件数据,接收用户端发送的指令,接收指令时需要考虑到安全问题, ATM购物车中的用户认证和mysql ...

  6. python访问mysql将返回的表转化为json

    ## Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreement ...

  7. Python访问MySQL数据库

    #encoding: utf-8 import mysql.connector __author__ = 'Administrator' config={'host':'127.0.0.1',#默认1 ...

  8. 【数据库】python访问mysql

    import MySQLdb 所有的数据库遵循相同的python database API 需要建立connection对象连接数据库,之后建立cursor对象处理数据. conn = MySQLdb ...

  9. fedora python访问mysql

    1 下载驱动库 http://sourceforge.net/projects/mysql-python/ 2, yum install mysql-dev* yum install python-d ...

随机推荐

  1. 洛谷P1592 互质

    题目描述 输入两个正整数n和k,求与n互质的第k个正整数. 输入输出格式 输入格式: 仅一行,为两个正整数n(≤10^6)和k(≤10^8). 输出格式: 一个正整数,表示与n互质的第k个正整数. 由 ...

  2. Go interface{}、类型断言

    在 golang 中 interface{} 可用于向函数传递任意类型的变量, 但在函数内部使用的话, 该变量的类型就是 interface{}, 也称为空接口类型 比如我们定义一个函数, 输出字符串 ...

  3. 控制对象的创建方式(禁止创建栈对象or堆对象)和创建的数量

    我们知道,C++将内存划分为三个逻辑区域:堆.栈和静态存储区.既然如此,我称位于它们之中的对象分别为堆对象,栈对象以及静态对象.通常情况下,对象创建在堆上还是在栈上,创建多少个,这都是没有限制的.但是 ...

  4. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程

    我们在之前的文章中中已经讲到了正确部署运行cas server 和 在cas client中配置. 在此基础上 我们去掉了https的验证,启用了http访问的模式. 单点登录(七)-----实战-- ...

  5. 面试自我介绍之English

    Version 1 Hello, everyone. I am so glad to stand here. First of all, I will introduce myself. My nam ...

  6. CentOS 6.5下Squid代理服务器的安装与配置

    1.1   缓存代理概述 作为应用层的代理服务器软件,squid主要提供缓存加速,应用层过滤控制的功能. 1.  代理的工作机制 当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存 ...

  7. php-fpm 重启 nginx单独配置 重启

    nginx单独配置 重启 [root@ssy106c14c190c69 Api]# cd /usr/local/nginx/sbin/[root@ssy106c14c190c69 sbin]# lsn ...

  8. mysql 设置默认编码为 utf8

    vi /etc/mysql/mysql.conf.d/mysqld.cnf [client] default-character-set=utf8 [mysql] default-character- ...

  9. P3924 康娜的线段树

    P3924 康娜的线段树 题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以 ...

  10. Android 使用GPS获取到经纬度后 无法在Android8.0上使用Geocoder类获取位置信息

    由于我的应用在获取到经纬度后在Android8.0不能使用如下代码获取位置信息.只好使用百度地图 WEB服务API 通过调接口的方式获取位置信息. Geocoder geocoder = new Ge ...