- 论坛徽章:
- 0
|
第六章:ADO记录集对象
记录集对象经常被用于得到一个查询或存储过程的返回结果。记录集对象经常被一个连接对象所赋值,用于保存自己获得的数据。ActiveConnection属性经常是被设置成连接对象。一个完整的包含记录集对象所有属性、方法的术语表是可以在MSDN中查询,所以我们在这儿将不再重复所有内容。我们将展示如何使用记录集对象进行基本的选择查询。下面的例子使用的是MySQL数据库,但是同样的代码可以很好的工作在其它数据库引擎上(如Access、SQL Server、Oracle等),而所要做的仅仅不过是改变ConnectionString的属性,其它的代码都可以不加考虑的用于其它数据库中。
from win32com.client import Dispatch
from adoconstants import *
# Create Connection object and connect to database.
# 建立连接对象并且连接到数据库中
oConn = Dispatch('ADODB.Connection')
oConn.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};" + \
"Server=192.168.0.50 ort=3306;" + \
"User=foobar assword=bigsecret;Database=mytestdb"
oConn.Open()
# Now create a RecordSet object and open a table
# 进行建立一个记录集并打开一个表格。
oRS = Dispatch('ADODB.RecordSet')
oRS.ActiveConnection = oConn # Set the recordset to connect thru oConn设置记录集通过oConn来连接
oRS.Open("zipcode" # Open a table called zipcode打开一个名叫zipcode的表
# Can also use oRS.Open("zipcode", oConn) instead of setting ActiveConnection
# 也可以用oRS.Open("zipcode",oConn)来代替ActiveConnection
while not oRS.EOF:
# Access individual fields by name -- all 4 methods are equivalent
# 通过名字存取单个字段--下面的4个方法都是相同的
print oRS.Fields.Item("city" .Value, oRS.Fields("state" , \
oRS.Fields("zip" .Value, oRS.Fields.Item("city"
# Access individual fields by position -- all 4 methods are equivalent
# 通过字段位置来存取单个字段值--下面的4个方法都是相同的
print oRS.Fields.Item(0), oRS.Fields(1), \
oRS.Fields(2).Value, oRS.Fields.Item(0).Value
# Move to the next record in the RecordSet
# 移动记录集的下一个记录
oRS.MoveNext()
# Close and clean up
# 关闭并清场
oRS.Close()
oRS = None
oConn.Close()
oConn = None
如你所见,上面的示例是很容易理解的。下面一些例子将说明如果执行一个查询或存储过程。
使用代码打开一个查询或存储过程是很简单的,就象上面的例子。你做要做的就是在打开表格的地方(oRS.Open("zipcode" )替换成下面的代码。其余的代码都是一样的。
oRS.Open("SELECT zip, city, state FROM zipcode ORDER BY id"
oRS.Open("SELECT zip, city, state FROM zipcode ORDER BY id", oConn)
# Assuming we have an engine that supports stored procedures which return result sets,
# such as SQL Server, we can call a stored proc as well. Here, the name of the stored
# proc is assumed to be selZipCode
# 现在假设我们的数据库引擎支持返回记录集的存储过程,比如SQL Server,我们将开始调用存储过程。
# 下面假设这个存储过程的名字是selZipCode。
oRS.Open("selZipCode"
oRS.Open("selZipCode", oConn)
另一种建立记录集对象的方法是使用连接对象的Execute的方法。Execute方法通过查询或存储过程返回记录集对象。如果你使用这个方法,你不需要建立新的记录集对象或者指派它的ActiveConnection属性。
# No Need to create a RecordSet object, so the next two lines are commented out
# 不需要建立记录集对象,所以下面两行被注释掉了
# oRS = Dispatch('ADODB.RecordSet')
# oRS.ActiveConnection = oConn
# Execute a query that returns a RecordSet
# 执行一个返回记录集的查询
(oRS, result) = oConn.Execute("SELECT zipcode, city, state FROM zipcode ORDER BY id"
# Execute a stored proc that returns a RecordSet
# 执行一个返回记录集的存储过程
(oRS, result) = oConn.Execute("selZipCode"
while not oRS.EOF:
# rest of code
# 其它代码不变
面的技术仅有于一些简单的查询,如果你有一个要构建象下面这样字符串的查询的话。
sql = "SELECT zip, city, state FROM zipcode WHERE city = '" + cityvar + "' ORDER BY id"
如果cityvar中有单引号的话,将会出现问题了,象我们在第三章的讨论一样,最好的方法是使用参数技术,在下一章节中我们将展示如果使用命令对象中的参数技巧。 |
|