2013-08-01 2 views
0

Я хотел бы создать словарь данных с использованием Python из базы данных SQL Server. Я написал следующий код, но он дает мне следующий результат,Создание словаря данных из базы данных SQL Server

[OrderedDict([('SystemID', '1'), ('FileID', 1), ('DateTime', None)])] 

Но я хочу, чтобы мой результат будет ниже,

File = { "SystemID": "1", "FileID": "1", "DateTime": None } 

Я следующий код прямо сейчас

import pyodbc 
import collections 
cnxn = pyodbc.connect(trusted_Connection='yes', driver = '{SQL Server}', server = 'localhost', database = 'myDB') 
cursor = cnxn.cursor() 
cursor.execute("SELECT SystemID, FileID, EventDateTime FROM dbo.File") 
rows = cursor.fetchall() 
objects_list = [] 
for row in rows: 
    d = collections.OrderedDict() 
    d['SystemID'] = row.SystemID 
    d['FileID'] = row.FileID 
    d['DateTime'] = row.EventDateTime 
    objects_list.append(d) 
print objects_list 
cnxn.close() 
+1

Это должно сделать трюк: заменить 'print objects_list' на' print dict (d) ' –

+0

Спасибо, это сработало. И простите меня за наивность. Как мне назвать словарь? Я имею в виду, что мне нужен вывод как, Файл = {"SystemID": "1", "FileID": "1", "DateTime": None} – user1345260

+1

print "File =", dict (d) –

ответ

0

Если вы используете dict (d), вы принуждаете упорядоченный словарь к dict, но ничего не мешает Python переупорядочивать его, Python dict не упорядочен.

Еще одна проблема заключается в том, что вы перебираете строки, а затем просто берете последний элемент, возможно, с тех пор, как вы разрабатываете и собираетесь переместить его обратно в цикл, как я покажу ниже, но в противном случае это не означает, Имеют смысл. Не следует злоупотреблять переменными, избегающими циклов в python.

Могу ли я предложить:

# Implicit concatenation for longish string, (see PEP 8) 
output_format = ('File = {{ "SystemID": "{SystemID}", ' 
       '"FileID": "{FileID}", "DateTime": {DateTime} }}') 
for row in rows: 
    d = {} 
    d['SystemID'] = row.SystemID 
    d['FileID'] = row.FileID 
    d['DateTime'] = row.EventDateTime  
    # expand the dictionary as keyword args for the str.format method 
    print output.format(**d) 

Но тогда вы, вероятно, не следует печатать в вашем конечном продукте либо.

Смежные вопросы