介绍

介绍

今天我们学习如何通过Python操作MySQL数据库。

在Python2.7下使用的是pymysql这个软件包,跟着福哥来操作吧。

安装

安装pymysql

直接使用pip安装即可

pip insall pymysql




MySQL 查询数组数据 mysql 查询数组数据库_bc


授权

MySQL数据库服务器默认只能在安装了数据库服务器的本机操作,也就是在TFLinux上操作,但是我们的python是安装在TFWindows上的啊!所以,我们要授权任何电脑都可以操作TFLinux上的MySQL数据库。当然了,肯定是需要正确的用户名和密码的啦!

在TFLinux上登录mysql

[root@tfdev ~]# mysql -uroot -pabcdefmysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or g.Your MySQL connection id is 3Server version: 5.7.28 MySQL Community Server (GPL)Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.mysql>

授权tfse用户可以在任意电脑上连接MySQL数据库服务器,且对数据库tfse有完全控制权限

mysql> grant all on tfse.* to tfse@'%' identified by 'abcdef';Query OK, 0 rows affected, 1 warning (0.02 sec)

测试

建立MySQLDemo.py用来进行pymysql的测试

测试连接

写入如下代码,测试mysql的连接

import pymysqlcn = pymysql.connect("192.168.1.168","tfse","abcdef")

如果没有报错,证明连接成功了!

测试写入数据

写入如下代码,向websites表写入一条数据

import pymysqltry:    # connection    cn = pymysql.connect("192.168.1.168","tfse","abcdef")    cursor = cn.cursor()    # select database    cn.select_db('tfse')except Exception as e:    print e    exit()try:    # insert data into websites    cursor.execute("INSERT INTO websites (domainName, weight, createDT) VALUES (%s,%s,now())", ['tongfu.net', 1])    # commit    cn.commit()except Exception as e:    print e    # rollback    cn.rollback()finally:    # close    cursor.close()    cn.close()

如果没有报错,就表示写入成功了!

查看数据

到TFLinux上查看刚刚写入的数据

mysql> select * from websites;+-----------+------------+-------+----------+--------+---------------------+-------------+-------------+| websiteId | domainName | title | descript | weight | createDT            | lastFetchDT | nextFetchDT |+-----------+------------+-------+----------+--------+---------------------+-------------+-------------+|         3 | tongfu.net | NULL  | NULL     |      1 | 2020-10-08 12:47:12 | NULL        | NULL        |+-----------+------------+-------+----------+--------+---------------------+-------------+-------------+1 row in set (0.00 sec)

测试查询数据

写入如下代码,查询websites里的数据

import pymysqltry:    # connection    cn = pymysql.connect("192.168.1.168","tfse","abcdef")    cursor = cn.cursor()    # select database    cn.select_db('tfse')except Exception as e:    print e    exit()try:    # query    cursor.execute("SELECT * FROM websites")    print ("总记录数量:" + str(cursor.rowcount))    rows = cursor.fetchall()    print ("记录信息")    for row in rows:        print row    # commit    cn.commit()except Exception as e:    print e    # rollback    cn.rollback()finally:    # close    cursor.close()    cn.close()


MySQL 查询数组数据 mysql 查询数组数据库_bc_02


教程

接下来我们系统学习一下pymysql这个软件包的功能

写入操作

写入操作包括很多,常见的命令包括:CREATE DATABASE/DROP DATABASE、CREATE TABLE/DROP TABLE/ALTER TABLE、INSERT INTO/UPDATE/DELETE等等。

写入操作都需要通过pymysql的cursor.execute方法来运行,如果运行出现异常会抛出except,我们捕获它进行后面的处理即可。

这里我们着重讲讲插入数据,更新数据,删除数据的操作

插入单行数据

插入一行数据,强烈建议使用指定字段名称的方式写入数据

import pymysqltry:    # connection    cn = pymysql.connect("192.168.1.168","tfse","abcdef")    cursor = cn.cursor()    # select database    cn.select_db('tfse')except Exception as e:    print e    exit()try:    # insert data into websites    cursor.execute("INSERT INTO websites (domainName, weight, createDT) VALUES (%s,%s,now())", ['www.tongfu.net', 1])    # websiteId of insert data    websiteId = cursor.lastrowid    print ("插入数据的websiteId是:" + str(websiteId))    # commit    cn.commit()except Exception as e:    print e    # rollback    cn.rollback()finally:    # close    cursor.close()    cn.close()


MySQL 查询数组数据 mysql 查询数组数据库_bc_03


插入多行数据

可以传入数组到cursor.executemany实现多行数据插入的操作

import pymysqltry:    # connection    cn = pymysql.connect("192.168.1.168","tfse","abcdef")    cursor = cn.cursor()    # select database    cn.select_db('tfse')except Exception as e:    print e    exit()try:    # insert data into websites    rows = [        ('www.baidu.com',1),        ('www.taobao.com',1),        ('www.jd.com',1)    ]    cursor.executemany("INSERT INTO websites (domainName, weight, createDT) VALUES (%s,%s,now())", rows)    # commit    cn.commit()except Exception as e:    print e    # rollback    cn.rollback()finally:    # close    cursor.close()    cn.close()

更新数据

使用UPDATE语句进行数据的修改操作

import pymysqltry:    # connection    cn = pymysql.connect("192.168.1.168","tfse","abcdef")    cursor = cn.cursor()    # select database    cn.select_db('tfse')except Exception as e:    print e    exit()try:    # insert data into websites    cursor.execute("UPDATE websites SET weight = 10 WHERE domainName = %s", 'tongfu.net')    # commit    cn.commit()except Exception as e:    print e    # rollback    cn.rollback()finally:    # close    cursor.close()    cn.close()

删除数据

使用DELETE语句删除数据

import pymysqltry:    # connection    cn = pymysql.connect("192.168.1.168","tfse","abcdef")    cursor = cn.cursor()    # select database    cn.select_db('tfse')except Exception as e:    print e    exit()try:    # insert data into websites    cursor.execute("DELETE FROM websites WHERE domainName = %s", 'www.baidu.com')    # commit    cn.commit()except Exception as e:    print e    # rollback    cn.rollback()finally:    # close    cursor.close()    cn.close()

读取操作

读取操作只的就是SELECT语句了,这个SELECT语句可以有非常复杂的变化,设计到多表联查的时候会更加复杂,有时候一个SQL语句几千个字符都很正常。

读取一行数据

通过cursor.fetchone读取一行数据

import pymysqltry:    # connection    cn = pymysql.connect("192.168.1.168","tfse","abcdef")    cursor = cn.cursor()    # select database    cn.select_db('tfse')except Exception as e:    print e    exit()try:    # insert data into websites    cursor.execute("SELECT * FROM websites WHERE domainName = %s", 'tongfu.net')    # fetch one    result = cursor.fetchone()    print result    # commit    cn.commit()except Exception as e:    print e    # rollback    cn.rollback()finally:    # close    cursor.close()    cn.close()


MySQL 查询数组数据 mysql 查询数组数据库_数据_04


读取全部数据

通过cursor.fetchall读取查询结果集的全部数据

import pymysqltry:    # connection    cn = pymysql.connect("192.168.1.168","tfse","abcdef")    cursor = cn.cursor()    # select database    cn.select_db('tfse')except Exception as e:    print e    exit()try:    # insert data into websites    cursor.execute("SELECT * FROM websites")    # fetch all    results = cursor.fetchall()    for result in results:        print result    # commit    cn.commit()except Exception as e:    print e    # rollback    cn.rollback()finally:    # close    cursor.close()    cn.close()


MySQL 查询数组数据 mysql 查询数组数据库_数据_05


数据分页

所谓数据翻页就是实现指定读取数据的起始位置和读取数据的条目数的技巧,通过这个技巧可以将一组数据均匀分成若干份,每一份相当于一页,这样的设计可以让用户像浏览图书一样的翻页效果

import pymysqlimport mathtry:    # connection    cn = pymysql.connect("192.168.1.168","tfse","abcdef")    cursor = cn.cursor()    # select database    cn.select_db('tfse')except Exception as e:    print e    exit()try:    # insert data into websites    cursor.execute("SELECT * FROM websites")    # pages    cursor.scroll(0, mode="absolute") # move to 0    try:        # count page numbers        totalNum = cursor.rowcount        pageNum = 1        pageCount = math.ceil(float(totalNum)/3)        while 1:            # fetch 2 rows            results = cursor.fetchmany(2)            print ("页码:" + str(pageNum))            for result in results:                print result            # page number +1            pageNum = pageNum+1            # page number more than page count then break            if pageNum > pageCount:                break    except Exception as e:        print e    # commit    cn.commit()except Exception as e:    print e    # rollback    cn.rollback()finally:    # close    cursor.close()    cn.close()


MySQL 查询数组数据 mysql 查询数组数据库_mysql select 数组_06


总结

今天我们学习了通过pymysql操作MySQL数据库的方法,大家课后可以自己多多练习,一定要数量掌握这个技巧才可以哦~~