2016-05-24 2 views
0

Я импортирую из файла sqlite3 в словарь для вставки в mongodb, я вроде как его работаю, но словарь вложен в список, и я не понимаю, почему и как его получить.Почему мой словарь внутри списка?

# python3.5 

    import os 
    import sqlite3 as lite 
    from collections import defaultdict 
    import pprint 

    def dict_factory(cursor, row): 
     d = {} 
     for idx, col in enumerate(cursor.description): 
      d[col[0]] = row[idx] 
     return d 

    def open_sql(sql_folder, sql_name, sql_table): 
     path_name = os.path.join(sql_folder,sql_name).strip() 
     con = lite.connect(path_name) 
     con.row_factory = dict_factory 
     cur = con.cursor() 
     cur.execute('SELECT * FROM ' + sql_table) 
     contents = defaultdict(list) 
     contents = cur.fetchall() 
     pprint.pprint(contents) 
     con.close() 
     return contents 

мой выход

[{'block_size': 512, 'img_offset': 0, 'obj_id': 2, 'vs_type': 1}] 

, что я хочу, чтобы мой выход будет

{'block_size': 512, 'img_offset': 0, 'obj_id': 2, 'vs_type': 1} 
+0

Пожалуйста, разрубить этот вплоть до соответствующий код. Я даже не могу сказать, откуда идут отпечатки. По крайней мере, удалите прокомментированный код. –

+0

'contents = defaultdict (list)' ничего не делает, потому что вы повторно назначаете эту переменную следующую строку. – njzk2

ответ

2

Это потому, что вы используете fetchall(), используйте fetchone() вместо:

contents = cur.fetchone() 
pprint.pprint(contents) 
+0

Я использовал fetchall(), потому что я хочу, чтобы весь контент не только в первой строке. Так ты говоришь, что мне нужно его зацикливать? Да ... документ действительно говорит, что fetchall() возвращает список. – JMJ

+0

@JenniferJohnson да, переверните словари в списке. Благодарю. – alecxe

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