本文实例讲述了Python实现数据库编程方法。分享给大家供大家参考。具体分析如下:
用PYTHON语言进行数据库编程, 至少有六种方法可供采用. 我在实际项目中采用,不但功能强大,而且方便快捷.以下是我在工作和学习中经验总结.
方法一:使用DAO (Data Access Objects)
这个第一种方法可能会比较过时啦.不过还是非常有用的. 假设你已经安装好了PYTHONWIN,现在开始跟我上路吧……
找到工具栏上ToolsàCOM MakePy utilities,你会看到弹出一个Select Library的对话框, 在列表中选择'Microsoft DAO 3.6 Object Library'(或者是你所有的版本).
现在实现对数据的访问:
?
1 2 3 4 5 #实例化数据库引擎 import win32com.client engine = win32com.client.Dispatch("DAO.DBEngine.35") #实例化数据库对象,建立对数据库的连接 db = engine.OpenDatabase(r"c:/temp/mydb.mdb")现在你有了数据库引擎的连接,也有了数据库对象的实例.现在就可以打开一个recordset了. 假设在数据库中已经有一个表叫做 'customers'. 为了打开这个表,对其中数据进行处理,我们使用下面的语法:
?
1 2 3 rs = db.OpenRecordset("customers") #可以采用SQL语言对数据集进行操纵 rs = db.OpenRecordset("select * from customers where state = 'OH'")你也可以采用DAO的execute方法. 比如这样:
?
1 2 db.Execute("delete * from customers where balancetype = 'overdue' and name = 'bill'") #注意,删除的数据不能复原了JEOF 等属性也是可以访问的, 因此你能写这样的语句:
?
1 2 3 while not rs.EOF: print rs.Fields("State").Value rs.MoveNext()我最开始采用这个方法,感觉不错.
方法二:使用Python DB API,Python ODBC modules(you can use ODBC API directly, but maybe it is difficult for most beginner.)
为了在Python里面也能有通用的数据库接口,DB-SIG为我们提供了Python数据库.(欲知详情,访问DB-SIG的网站,http://www.python.org/sigs/db-sig/). Mark
Hammond的win32扩展PythonWin里面包含了这些API的一个应用-odbc.pyd. 这个数据库API仅仅开放了一些有限的ODBC函数的功能(那不是它的目的),但是它使用起来很简单,而且在win32里面是免费的.
安装odbc.pyd的步骤如下:
1. 安装python软件包:
http://www.python.org/download/
2. 安装Mark Hammond的最新版本的python win32扩展 - PythonWin:
http://starship.python.net/crew/mhammond/
3. 安装必要的ODBC驱动程序,用ODBC管理器为你的数据库配置数据源等参数
你的应用程序将需要事先导入两个模块:
dbi.dll - 支持各种各样的SQL数据类型,例如:日期-dates
odbc.pyd – 编译产生的ODBC接口
下面有一个例子:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import dbi, odbc # 导入ODBC模块 import time # 标准时间模块 dbc = odbc.odbc( # 打开一个数据库连接 'sample/monty/spam' # '数据源/用户名/密码' ) crsr = dbc.cursor() # 产生一个cursor crsr.execute( # 执行SQL语言 """ SELECT country_id, name, insert_change_date FROM country ORDER BY name """ ) print 'Column descriptions:' # 显示行描述 for col in crsr.description: print ' ', col result = crsr.fetchall() # 一次取出所有的结果 print '/nFirst result row:/n ', result[0] # 显示结果的第一行 print '/nDate conversions:' # 看看dbiDate对象如何? date = result[0][-1] fmt = ' %-25s%-20s' print fmt % ('standard string:', str(date)) print fmt % ('seconds since epoch:', float(date)) timeTuple = time.localtime(date) print fmt % ('time tuple:', timeTuple) print fmt % ('user defined:', time.strftime('%d %B %Y', timeTuple))下面是结果:
输出(output)
?
1 2 3 4 5 6 7 8 9 10 11 Column descriptions: ('country_id', 'NUMBER', 12, 10, 10, 0, 0) ('name', 'STRING', 45, 45, 0, 0, 0) ('insert_change_date', 'DATE', 19, 19, 0, 0, 1) First result row: (24L, 'ARGENTINA', <DbiDate object at 7f1c80>) Date conversions: standard string: Fri Dec 19 01:51:53 1997 seconds since epoch: 882517913.0 time tuple: (1997, 12, 19, 1, 51, 53, 4, 353, 0) user defined: 19 December 1997大家也可以去http://www.python.org/windows/win32/odbc.html看看,那儿有两个Hirendra Hindocha写的例子,还不错.
注意, 这个例子中,结果值被转化为Python对象了.时间被转化为一个dbiDate对象.这里会有一点限制,因为dbiDate只能表示UNIX时间(1 Jan 1970 00:00:00 GMT)之后的时间.如果你想获得一个更早的时间,可能会出现乱码甚至引起系统崩溃.*_*
方法三: 使用 calldll模块
(Using this module, you can use ODBC API directly. But now the python version is 2.1, and I don't know if other version is compatible with it. 老巫:-)
Sam Rushing的calldll模块可以让Python调用任何动态连接库里面的任何函数,厉害吧?哈.其实,你能够通过直接调用odbc32.dll里面的函数操作ODBC.Sam提供了一个包装模块odbc.py,就是来做这个事情的.也有代码来管理数据源,安装ODBC,实现和维护数据库引擎 (Microsoft Access).在那些演示和例子代码中,还有一些让人侧目的好东东,比如cbdemo.py,有一个信息循环和窗口过程的Python函数!
[你可以到Sam's Python Software去找到calldll的相关连接,那儿还有其他好多有趣的东西]
下面是安装CALLDLL包的步骤:
1. 安装PYTHON软件包(到现在为止最多支持2.1版本)
2. 下载calldll-2001-05-20.zip:
ftp://squirl.nightmare.com/pub/python/python-ext/calldll-2001-05-20.zip
3. 在LIB路径下面创建一个新路径比如说:
c:/Program Files/Python/lib/caldll/
4. 在原目录下解压calldll.zip
5. 移动calldll/lib/中所有的文件到上面一个父目录(calldll)里面,删除子目录(lib)
6. 在CALL目录里面生成一个file __init__.py文件,象这样:
# File to allow this directory to be treated as a python 1.5
package.
7. 编辑calldll/odbc.py:
在"get_info_word"和"get_info_long"里面,改变"calldll.membuf"为"windll.membuf"
下面是一个怎么使用calldll的例子:
?
1 2 3 4 5 6 7