Как изменить формат ADO ResultSet в Python? - PullRequest
1 голос
/ 02 марта 2012

У меня есть следующий код для запроса базы данных с помощью ADO COMObject в Python. Это подключение к базе данных временных рядов (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 Ответ

1 голос
/ 02 марта 2012

То, что вы видите, на самом деле не Python, а вывод GetRows () , который возвращает двумерный массив, который организован по полю, а затем по строке.

К счастью, в Python есть функция zip () , которая внесет соответствующие изменения для вас.Попробуйте изменить код с:

result = oRS.GetRows(1)

на:

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

и т. Д.

...