python db-api使用流程包括_使用Python DB-API开发MySQL脚本(上)

本文将向读者详细介绍如何利用DB-API模块方便地开发MySQL脚本。我们首先介绍了有关软件的安装方法,随后分别用两个实例对DB-API模块做了深入的介绍,最后讨论了用Python DB-API编写的MySQL脚本的移植注意事项。

一、DB-API简介

Python语言是一种流行的开源编程语言,不仅自身表达能力强,而且还有许多辅助模块,着极大的增强了其功能。本文介绍的是一个名为DB-API的模块——顾名思义,该模块为开发人员提供了数据库应用编程接口。DB-API旨在帮应用开发人员摆脱特定数据库引擎的具体细节的纠缠,编写出能够在不同数据库引擎之间相互移植的数据库访问脚本。

DB-API的设计与Perl和Ruby的DBI模块、PHP 的PEAR DB 类以及Java的JDBC接口非常类似,它使用了一个两层体系结构,其中顶层提供了一个抽象接口,该接口可以泛用于所有支持的数据库引擎;而底层则是有一些特定引擎的驱动程序构成,这些驱动程序负责处理与特定引擎有关的细节。这样的话,为了使用DB-API来编写Python脚本,必须有相应的驱动程序来处理特定的数据库系统。对于MySQL来说,DB-API使用驱动程序MySQLdb来处理对MySQL数据库的访问。下面我们将首先详细介绍驱动程序的安装,然后阐述如何编写DB-API脚本。

二、安装MySQLdb

为了用DB-API编写MySQL脚本,必须确保已经安装了Python。对于UNIX操作系统来说,通常都安装有该软件,但是Windows系统的话就难说了。其实Python的安装很简单,先到Python官方网站下载安装程序,然后一路回车即可。

就本文而言,我们要求使用Python 2.3.4或更高版本,并且还得安装MySQLdb模块。我们可以从命令行提示符(这里的提示符为UNIX操作系统中的%,如果是Windows系统的话,该提示符则为C:>)中输入下列命令来检查两者的安装情况,命令如下所示:

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

–>  % python

Python 2.4.3 (#1, Aug 29 2006, 14:45:33)

[GCC 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)] on linux2

Type “help”, “copyright”, “credits” or “license” for more information.

>>> import MySQLdb

假如Python的版本满足要求,并且输入import MySQLdb命令(即导入MySQLdb模块)后没有出现错误报告的话,我们就可以开始编写访问数据库的脚本了;但是,如果出现下列错误消息的话,则说明还缺少MySQLdb,所以必须先下载安装MySQLdb模块:

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

–>  >>> import MySQLdb

Traceback (most recent call last):

File “”, line 1, in ?

ImportError: No module named MySQLdb

为了获得MySQLdb,请访问http://sourceforge.net/projects/mysql-python,从这里可选择适合您的平台的安装包,分为预编译的二进制文件和源代码安装包。如果您选择二进制文件发行版本的话,安装过程基本安装提示即可完成。如果从源代码进行安装的话,则需要切换到MySQLdb发行版本的顶级目录,并键入下列命令。在UNIX操作系统之下安装的时候,第二条命令需要以超级用户的身份运行才能将驱动程序文件复制到Python的安装目录中。具体命令如下所示:

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

–>  % python setup.py build

% python setup.py install

如果安装时遇到问题,您可以阅读MySQLdb发行版本中的自述文件来寻找答案。

三、我们第一个DB-API脚本

脚本使用MySQLdb的DB-API访问MySQL的时候,通常要经过以下步骤:

l 导入MySQLdb模块

l 打开一个MySQL服务器连接

l 发出查询语句并回收查询结果

l 关闭服务器连接

下面我们通过一个简单的DB-API脚本对这些步骤进行说明。编写脚本时,可以使用文本编辑程序建立一个文件,将其命名为server_version.py,然后用它来存放下面的脚本。这个脚本利用MySQLdb实现与MySQL服务器的交互,它的任务很简单,那就是询问服务器的版本字符串:

# server_version.py – 检索并显示数据库服务器版本

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

–>  import MySQLdb

conn = MySQLdb.connect (host = “localhost”,

user = “testuser”,

passwd = “testpass”,

db = “test”)

cursor = conn.cursor ()

cursor.execute (“SELECT VERSION()”)

row = cursor.fetchone ()

print “server version:”, row[0]

cursor.close ()

conn.close ()

Import语句告诉Python该脚本需要MySQLdb模块中的代码。注意,导入语句必须放置在连接MySQL服务器的语句之前。然后,使用相应连接参数来调用MySQLdb驱动程序的connect()方法,这些参数包括运行MySQL的服务器的主机名,我们MySQL帐户对应的用户名和口令,以及我们要使用的数据库的名称。Connect()的参数语法会随着驱动程序的不同而不同,对于MySQLdb来说,这些参数可以通过name = value的格式提供,这样的话,我们就可以不同的顺序来提供参数。server_version.py会在本地主机上建立一个到达MySQL服务器的连接,并利用用户名和口令即testuser和testpass来访问我们的数据库test,如下所示:

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

–>  conn = MySQLdb.connect (host = “localhost”,

user = “testuser”,

passwd = “testpass”,

db = “test”)

如果调用connect()成功,它会返回一个连接对象,为进一步与MySQL交互做好准备。如果调用失败,它会抛出一个异常。注意,我们的server_version.py脚步并没有处理该异常,所以碰到错误时该脚本就会终止。具体的错误处理将在后面加以介绍。

获得连接对象之后,server_version.py会调用该对象的cursor()方法来创建一个游标对象来处理语句。该脚本利用这个游标发送一个SELECT VERSION()语句,该语句会返回一个包含有服务器版本信息的字符串,如下所示:

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

–>  cursor = conn.cursor ()

cursor.execute (“SELECT VERSION()”)

row = cursor.fetchone ()

print “server version:”, row[0]

cursor.close ()

该游标对象的execute()方法能将向服务器发送语句,而fetchone()方法则检索回一行数据,该数据作为元组处理。对于这里的语句,该元组包含一个单一的值,这个值将被该脚本打印出来。如果无法取得数据行,fetchone()将返回None值;这种情况的处理我们将在后面加以介绍。游标对象可用于发出多个语句,但是server_version.py获取版本字符串之后就不再需要该游标了,所以我们将其关闭即可。

最后,该脚本调用连接对象的close()方法关闭到服务器的连接,如下所示:

conn.close ()

之后,conn将被废弃,所以就无法再使用它来访问服务器了。

若要执行server_version.py脚本,可以从命令行调用Python,并给出该脚本的名称即可。之后,我们将看到类似如下所示的输出:

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

–>  % python server_version.py

server version: 5.1.12-log

这表明该MySQL服务器的版本是5.1.12;后缀-log说明查询日志记录功能已被启用。当然,实际上您可能会看到其他后缀,这要视您使用的数据库服务器而定。举例来说,后缀-beta表示该发行版本的稳定级别;如果您启用了调试功能,您就会在运行结果中看到-debug后缀。

所以可以建立脚本,这样可以通过其名称来运行之,而无需显式调用Python。在UNIX操作系统之下,可以为脚本开头部分添加一个#!行,用以规定Python解释器的完整路径。这样的话,系统就知道应使用哪个程序来执行此脚本。举例来说,如果Python解释器位于/usr/bin/python,那么可在脚本的第一行添加如下所示的内容:

#!/usr/bin/python

然后,使用chmod把该脚本变成可执行文件,这样我们就能通过下列命令来直接运行脚本:

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

–>  % chmod +x server_version.py

% ./server_version.py

其中,先导的./的作用是显式告诉命令解释程序:该脚本位于当前目录中,这样做是因为许多UNIX操作系统的帐户没有配置成在当前目录搜索命令。

在Windows操作系统中,无需#!行开头,不过即使加了这一行也没有关系,所以如果要把运行在UNIX系统的脚本移植到Windows系统的时候,无需对它进行修改。不过,与使用chmod将.py脚本变为可执行文件不同,我们需要把以.py结尾的文件与Python关联在一起,为此,可以在控制面板中打开“工具”菜单下的“文件夹选项”,单击文件类型选项卡, 在此,将以.py作为扩展名的文件设置成使用Python打开。这样一来,我们就可以通过脚本的名称来调用它了,如下所示:

C:> server_version.py

如果在 Windows 上安装的是ActiveState Python,那么ActiveState的安装程序会在安装过程中自动完成此关联过程。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

fd36bffceef597f61007249bab39600c.png

TechTarget

官方微博

1a369747a5d362acddc09aa36b6fafe0.png

TechTarget中国

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值