17 Python数据库编程(Win版)

本章有三部分内容,首先是MySQL服务器的安装和Python访问MySQL接口软件的安装,其次是MySQL数据库服务器的基本使用,最后则是Python编程访问MySQL数据库服务器。

17.1 相关数据库软件安装

这一节主要内容是安装MySQL服务器和Python访问MySQL的接口程序。

17.1.1 MySQL服务器的安装

以WindowsXP系统为例讲解在Windows计算机上安装MySQL的过程,这里安装的MySQL数据库文件是 可以从本文提供的 mysql-5.0.27-win32.zip下载地址下载,解压之后就一个文件setup.exe,在解压目录下双击此文件即开始MySQL-Server的安装过程。

一般安装过程没有特别的地方可以说的,很快就可安装完毕,在安装完毕服务器软件后需要配置一下MySQL-Server,其实是主要配置MySQL-Server服务器的root用户的密码,可以从windowsxp的开始菜单找到mysql-> mysql server 5.0-> MySQL Server Instance Config Wizard然后进行配置。配置过程基本是next,只有一步是关键的即输入root用户的密码,假设密码为123456。

之后就是通过mysql的客户端软件MySQL Command Line Client,如下图所示,登录MySQL的服务器。

客户端软件

在弹出的cmd对话框里首先输入配置root用户的密码123456之后回车,如果密码正确可以看到下图,即说明登录成功了。

登录成功

至此,MySQL在本机就算安装成功了。

17.1.2 Python访问MySQL的接口安装

从MySQL-Python接口软件MySQL-python-1.2.4b4.win32-py2.7.exe的下载地址下载MySQL-Python软件,双击安装,此软件安装完毕后在Python里即可通过编程的方式访问MySQL数据库了。 双击下载的软件,开始安装,如下图所示:

点击“下一步”按钮进行安装,如下图:

这一步需要注意,软件是否能正常安装成功首先python的配置好,如果python未配置好,是不会出现"python dirctory"后边的"c:\python27",这个得配置系统变量16.3节,配置好以后在安装本软件。如果之前配置好了,那么此时可以点击“下一步”完成安装。

测试是否安装成功

运行cmd,在cmd对话框里键入python,启动python,之后在Python的交互Shell里键入import MySQLdb,如果没有报错,说明python访问mysql服务器的接口已经安装好,如下图:

17.2 MySQL数据库的基本使用

WindowsXP上安装好了MySQL-Server以后,便可通过MySQL的客户端登录MySQL服务器,在服务器上创建数据库、数据表并对表进行插入、查询等操作。

登录数据库

登录数据库,除了用MySQL Command Line Client以外,实际可以直接用cmd,但需要配置cmd环境能够找到mysql客户端命令,即也需要配置系统变量。下图是没有配置系统环境变量时直接键入mysql命令报错!

故需参考配置系统变量16.3节去配置mysql能被cmd环境识别,如下图所示:

即需要将mysql.exe所在的目录C:\Program Files\MySQL\MySQL Server 5.0\bin前加分号即;C:\Program Files\MySQL\MySQL Server 5.0\bin加在系统变量Path的最后,这样cmd就能找到mysql.exe了。 输入的命令是mysql -h localhost -u root -p,这时登录本地的mysql服务器,如果想登陆网络上某计算机上的mysql服务器,将localhost换成那台计算机的ip或者域名地址即可,-u是登录的用户名,-p后暂不写密码回车之后键入。

查看有哪些已存在的库?

使用的命令是show databases;, 注意最后的分号,如果不小心回车之前命令尚未写完整,会出现->在箭头后继续写,mysql支持多行写命令,一直写下去,写完分号之后再回车即可。

创建新的数据库

从上图可以看出mysql服务器上已有一些数据库了,可以用create database 新建的数据库名;来创建一个新的数据库,例如创建cpython数据库的命令为create database cpython;如上图所示,如果命令格式及语法正确,会返回Query Ok...字样。

操作使用某库

MySQL数据库,修改的是库下的表,为此得首先打开库,使用命令为use 某数据库名;,现在的想法是在新建的cpython数据库里建一个表,得首先使用这个cpython库,操作命令为use cpython;,如下图所示:

创建表

cpython库为刚刚创建的新的数据库,其下目前是没有任何表的,可以用一下show tables;来看看。那好,那就创建一个表吧名字为user的表,命令如下: create table user(id int, name varchar(32));,实际操作截图如下所示:

可以用show tables;来看看是否创建成功了呢?如上图已经有user字样在"Tables_in_cpython"下了,这说明cpython里已经有一个表,表名字为user。

向表插入数据

向cpython数据库的user表插入几条数据,在MySQL数据库里,向表插入数据的指令为insert into 表名字 values(各字段值);,表user只有两个字段id和name(可以用desc user;查看表的信息),故values后跟两个值分别为int型和字符串型的数据即可,如下图所示:

查看表里的数据

查看表数据可以用select 语句,如下图所示:

退出数据库服务器

客户端切断与服务器的连接访问称之为退出,直接键入exit;回车即可。

17.3 Python访问MySQL数据库

Python可以通过MySQLdb模块编程访问MySQL数据库里的某库下的某表,进行对表的增删改查等操作。MySQLdb模块在windows下是通过本章的17.2节安装,其他系统平台例如Linux计算机安装MySQLdb相当简单,一条命令即可完成。

$ sudo pip install mysql-python

在确认MySQLdb已经正确安装之后就可用MySQLdb在python里编程访问MySQL数据库了。

17.3.1 Python访问MySQL编程步骤

17.3.1.1 建立数据库服务器连接访问连接对象

通过MySQLdb的connect函数建立Python与MySQL之间的连接对象。

import MySQLdb
conn = MySQLdb.connect(host = "localhost", user = "root", passwd = "123456", db = "cpython")

17.3.1.2 建立 python 和数据库服务器交互的游标对象

cur = conn.cursor()

17.3.1.3 通过游标和数据库进行交互SQL语句

通过上面创建的游标cur向MySQL数据库服务器提交SQL指令。 execute(sql)语句就是向MySQL提交了sql这条指令。

如果是查询,可以通过游标从服务器获得结果集

sql = "select * from user;"
cur.execute(sql)
ret = cur.fetchall()

如果是插入或修改,在提交sql后还需通过连接对象修改数据库或表

sql = "insert into user values(3, 'reliya');"
cur.execute(sql)
conn.commit()

17.3.1.4 关闭游标对象

完成了数据库的使用首先要关闭与某数据库连接的游标。

17.3.1.5 关闭连接对象

接着关闭与数据库服务器连接的连接对象。

17.3.2 Python访问数据库MySQL完整程序

示例1:读取cpython数据库user表里的数据

import MySQLdb
conn = MySQLdb.connect(host = "localhost", user = "root", passwd = "123456", db = "cpython")
cur = conn.cursor()
sql = "select * from user;"
cur.execute(sql)
ret = cur.fetchall()
for x in ret:
    print x
cur.close()
conn.close()

程序执行结果如下:

(1L, 'liming')
(2L, 'yangmi')
(3L, 'xiaoshenyang')

示例2:提交新数据

import MySQLdb
import random
conn = MySQLdb.connect(host = "localhost", user = "root", passwd = "123456", db = "cpython")
cur = conn.cursor()
x = random.randint(1, 100)
sql = "insert into user values(%d, '%s');" %(x, "cpython" + str(x))
cur.execute(sql)
conn.commit()
sql = "select * from user;"
cur.execute(sql)
ret = cur.fetchall()
for x in ret:
    print x
cur.close()
conn.close()

程序的执行结果如下:

(1L, 'liming')
(2L, 'yangmi')
(3L, 'xiaoshenyang')
(41L, 'cpython41')
(11L, 'cpython11')
(97L, 'cpython97')
(11L, 'cpython11')

可以用MySQL的客户端工具登录MySQL服务器查看user表里的数据信息,如下图所示: