如何在python中更改ADO ResultSet格式?

时间:2012-03-02 16:58:14

标签: python ado

我有以下代码在python中使用ADO COMObject查询数据库。这是连接到时间序列数据库(OSIPI),这是我们能够将Python连接到数据库的唯一方法。

from win32com.client import Dispatch

oConn = Dispatch('ADODB.Connection')
oRS = Dispatch('ADODB.RecordSet')
oConn.ConnectionString = <my connection string>
oConn.Open()
oRS.ActiveConnection = oConn
if oConn.State == adStateOpen:
    print "Connected to DB"
else:
    raise SystemError('Database Connection Failed')

cmd = """SELECT tag, dataowner FROM pipoint WHERE tag LIKE 'TEST_TAG1%'"""  

self.oRS.Open(cmd)
result = oRS.GetRows(1) 
print result

result2 = oRS.GetRows(2)    
print result2

if oConn.State == adStateOpen: 
    oConn.Close()
oConn = None 

此代码将以下两行作为结果返回给查询:

result ((u'TEST_TAG1.QTY.BLACK',), (u'piadmin',))
result2 = ((u'TEST_TAG1.QTY.BLACK', u'TEST_TAG1.QTY.PINK'), (u'piadmin', u'piuser'))

这不是预期的格式。在这种情况下,我期待这样的事情:

result = ((u'TEST_TAG1.QTY.BLACK',u'piadmin'))
result2 = ((u'TEST_TAG1.QTY.BLACK',u'piadmin'), 
            (u'TEST_TAG1.QTY.PINK',u'piuser'))

有没有办法调整ADO查询的结果,所以与第1行相关的所有内容都在同一个元组中,第2行中的所有内容都在同一个元组中?

1 个答案:

答案 0 :(得分:1)

你所看到的并不是Python的东西,而是GetRows()的输出,它返回一个二维数组,按字段排列然后排。

幸运的是,Python具有zip()功能,可以为您进行相关更改。尝试更改您的代码:

result = oRS.GetRows(1)

为:

result = zip(*oRS.GetRows(1))