zoukankan      html  css  js  c++  java
  • Python访问MySQL(1):初步使用PyMySQL包

    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++

    代码如下:

     1 import pymysql.cursors
     2 
     3 # Connect to the database
     4 conn = pymysql.connect(host='localhost',
     5                       user='root',
     6                       password='111111',
     7                       db='earth',
     8                       charset='utf8mb4',
     9                       cursorclass=pymysql.cursors.DictCursor)
    10 
    11 print(conn.get_server_info())
    12 
    13 print(conn.get_host_info())
    14 
    15 try:
    16     with conn.cursor() as cursor:
    17         # Create a new record
    18         sql = "INSERT INTO area (name_cn, parent_id, name_en) VALUES (%s, %s, %s)"
    19         cursor.execute(sql, ('中国', 0, 'China'))
    20         
    21         # conn is not autocommit by default.
    22         # so you must commit to save these changes.
    23         conn.commit()
    24 
    25     with conn.cursor() as cursor:
    26         # read a single record
    27         sql = "SELECT id, parent_id, name_cn, name_en, create_t, update_t FROM area"
    28         cursor.execute(sql)
    29         result = cursor.fetchone()
    30         print(result)
    31         
    32     with conn.cursor() as cursor:
    33         # read all records
    34         sql = 'select id,parent_id,name_cn,name_en from area'
    35         cursor.execute(sql)
    36         results = cursor.fetchall()
    37         for row in results:
    38             rid = row.get('id')
    39             rpid = row.get('parent_id')
    40             rcnn = row.get('name_cn')
    41             renn = row.get('name_en')
    42                         
    43             print("id = %d, pid = %d, name_cn = %s, name_en = %s" % 
    44                 (rid, rpid, rcnn, renn))
    45 
    46 finally:
    47     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

  • 相关阅读:
    alpha冲刺9
    alpha冲刺8
    alpha冲刺7
    alpha冲刺6
    团队作业——随堂小测(同学录)
    alpha冲刺5
    alpha冲刺4
    alpha冲刺3
    设计模式——桥接模式
    Java基础——关键字
  • 原文地址:https://www.cnblogs.com/luo630/p/9010350.html
Copyright © 2011-2022 走看看