Python & ADO
2012-11-08 20:37
183 查看
(作者:玛瑙河,转载请注明作者或出处,
![](http://www.cnblogs.com/Emoticons/QQ/13.gif)
)
在Windows系统中,用Python脚本通过ADO来操作数据库是相当有效率的,你犯不着去找各种各样的数据库模块,因为ADO已经为你准备好了一切。有时候一个不太复杂却用简单的SQL查询不能解决的问题,用Python脚本就能很方便的解决,犯不着打开某些强大的IDE并新建一个工程(杀鸡焉用牛刀!),你所需要的工具,仅notepad或其它简单的文本编辑器就足够了。要使用ADO,必须安装pywin32模块。如果您用的是ActivePython,那么系统中已经安装了该模块,否则请先下载并安装pywin32。下面是通过ADO操作MS
SQL Server数据库的例子:
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#-*- coding: utf-8 -*-
2
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#以下的例子中假设classmates数据库中有一个名为classmate的表,该表有三个字段:name(必填字段)、Email、address,
3
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
import win32com.client
4
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
DSN= r"Provider=SQLOLEDB;UID=xx;PWD=yy@cc;Database=classmates;Server=localhost"
6
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#Select的例子
7
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset = win32com.client.Dispatch(r"ADODB.Recordset")
8
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.ActiveConnection = DSN
9
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.Source = r"SELECT name, Email, address FROM dbo.classmate"
10
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.CursorType = 0
11
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.CursorLocation = 2
12
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.LockType = 1
13
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.Open()
14
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
numRows = 0
15
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
while not Recordset.EOF:
16
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
print r'Name:',Recordset.Fields.Item("name").Value.encode('gbk')
17
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if Recordset.Fields.Item("Email").Value != None:
18
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
print r' EMail:',Recordset.Fields.Item("Email").Value.encode('gbk')
19
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if Recordset.Fields.Item("address").Value != None :
20
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
print r' Address:',Recordset.Fields.Item("address").Value.encode('gbk')
21
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
numRows+=1
22
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.MoveNext()
23
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
print 'Total Rows:',numRows
24
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#Insert的例子
26
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert = win32com.client.Dispatch(r"ADODB.Command")
27
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.ActiveConnection = DSN
28
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.CommandText = r"INSERT INTO dbo.classmate (name, Email, address) VALUES ('xx','abc@xyz.com','ABC Street' ) "
29
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.CommandType = 1
30
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.CommandTimeout = 0
31
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.Prepared = true
32
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.Execute()
33
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#Update的例子
35
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate = win32com.client.Dispatch(r"ADODB.Command")
36
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.ActiveConnection = DSN
37
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.CommandText = r"UPDATE dbo.classmate SET Email='xx@yy.com', address='XX Street' WHERE name='xx' "
38
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.CommandType = 1
39
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.CommandTimeout = 0
40
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.Prepared = true
41
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.Execute()
42
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#Delete的例子
44
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete = win32com.client.Dispatch(r"ADODB.Command")
45
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.ActiveConnection = DSN
46
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.CommandText = r"DELETE FROM dbo.classmate WHERE name = 'xx'"
47
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.CommandType = 1
48
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.CommandTimeout = 0
49
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.Prepared = true
50
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.Execute()
51
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
如果您需要操作Access或其他数据库,只需修改DSN和相应的SQL语句即可,比如:DSN=r'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\Test.mdb;'
参考:
http://www.ecp.cc/pyado.html
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmscadoobjmod.asp
![](http://www.cnblogs.com/Emoticons/QQ/13.gif)
)
在Windows系统中,用Python脚本通过ADO来操作数据库是相当有效率的,你犯不着去找各种各样的数据库模块,因为ADO已经为你准备好了一切。有时候一个不太复杂却用简单的SQL查询不能解决的问题,用Python脚本就能很方便的解决,犯不着打开某些强大的IDE并新建一个工程(杀鸡焉用牛刀!),你所需要的工具,仅notepad或其它简单的文本编辑器就足够了。要使用ADO,必须安装pywin32模块。如果您用的是ActivePython,那么系统中已经安装了该模块,否则请先下载并安装pywin32。下面是通过ADO操作MS
SQL Server数据库的例子:
1
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#-*- coding: utf-8 -*-
2
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#以下的例子中假设classmates数据库中有一个名为classmate的表,该表有三个字段:name(必填字段)、Email、address,
3
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
import win32com.client
4
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
DSN= r"Provider=SQLOLEDB;UID=xx;PWD=yy@cc;Database=classmates;Server=localhost"
6
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#Select的例子
7
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset = win32com.client.Dispatch(r"ADODB.Recordset")
8
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.ActiveConnection = DSN
9
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.Source = r"SELECT name, Email, address FROM dbo.classmate"
10
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.CursorType = 0
11
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.CursorLocation = 2
12
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.LockType = 1
13
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.Open()
14
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
numRows = 0
15
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
while not Recordset.EOF:
16
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
print r'Name:',Recordset.Fields.Item("name").Value.encode('gbk')
17
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if Recordset.Fields.Item("Email").Value != None:
18
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
print r' EMail:',Recordset.Fields.Item("Email").Value.encode('gbk')
19
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if Recordset.Fields.Item("address").Value != None :
20
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
print r' Address:',Recordset.Fields.Item("address").Value.encode('gbk')
21
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
numRows+=1
22
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Recordset.MoveNext()
23
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
print 'Total Rows:',numRows
24
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#Insert的例子
26
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert = win32com.client.Dispatch(r"ADODB.Command")
27
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.ActiveConnection = DSN
28
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.CommandText = r"INSERT INTO dbo.classmate (name, Email, address) VALUES ('xx','abc@xyz.com','ABC Street' ) "
29
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.CommandType = 1
30
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.CommandTimeout = 0
31
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.Prepared = true
32
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandInsert.Execute()
33
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#Update的例子
35
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate = win32com.client.Dispatch(r"ADODB.Command")
36
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.ActiveConnection = DSN
37
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.CommandText = r"UPDATE dbo.classmate SET Email='xx@yy.com', address='XX Street' WHERE name='xx' "
38
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.CommandType = 1
39
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.CommandTimeout = 0
40
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.Prepared = true
41
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandUpdate.Execute()
42
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#Delete的例子
44
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete = win32com.client.Dispatch(r"ADODB.Command")
45
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.ActiveConnection = DSN
46
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.CommandText = r"DELETE FROM dbo.classmate WHERE name = 'xx'"
47
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.CommandType = 1
48
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.CommandTimeout = 0
49
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.Prepared = true
50
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
CommandDelete.Execute()
51
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
如果您需要操作Access或其他数据库,只需修改DSN和相应的SQL语句即可,比如:DSN=r'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\Test.mdb;'
参考:
http://www.ecp.cc/pyado.html
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmscadoobjmod.asp
相关文章推荐
- Python & ADO
- python生成uuid,并去掉中间的'-'
- python2.7 使用super关键词 报错 TypeError: must be type, not&n
- Ubuntu14.04 python 升级为3.5 && virtualenv安装
- Python&Flash开发斗兽棋---2.网络基础
- ADO API 参考(DataSpace 对象 &Error 对象 &Field 对象)
- Python & OpenCV 图像基本操作
- python文件中 `if __name__ == '__main__':` 的作用
- Python入门的36个例子 之 32 -> OOP – Inheritance 继承
- 莱斯大学Python课程Mini-project # 2 - "Guess the number" game
- 【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- cannot open file "python26_d.lib"
- 第十一周:( LeetCode567) Permutation in String(c++ && python)
- python django rest framework Authentication & Permissions
- 【leetcode】338. Counting Bits(C++ & Python)
- Python实现堆栈和队列<转>
- Cron 的在ubuntu 定时执行自己的程序&& Python获取当前 脚本文件的路径。
- python 学习while语句中的break&continue
- python调用ADO处理2进制字段例子
- 数据结构&算法实践-Python——序章