2016-02-02 3 views
0

У меня есть словарь python, который в настоящее время маринован с использованием cPickle, но слишком большой (~ 8Gb на диске) для загрузки сразу. Поскольку мне не обязательно нужен весь словарь сразу, я хотел бы использовать SQLite или другую систему баз данных для хранения и доступа к этим данным.Конвертировать словарь python из списков в базу данных SQLite

Текущий формат словаря: {id: (list)}, где id всегда является целым числом, а в списке всегда 165 поплавков. Порядок поплавков важен, поэтому каждый из них должен храниться в столбце.

Только я получаю доступ к этим данным и только с использованием python. Как я могу наиболее легко записать это в базу данных, а затем извлечь список из идентификатора?

ответ

1

Ниже приведена демонстрация с использованием 3 поплавков. Вы можете экстраполировать на 165.

>>> import sqlite3 
>>> conn = sqlite3.connect(':memory:') 
>>> c = conn.cursor() 
>>> c.execute('create table t (id,a,b,c);') 
<sqlite3.Cursor object at 0x01418420> 
>>> conn.commit() 
>>> d = {0:[1.0,2.0,3.0]} 
>>> import itertools as it 
>>> c.execute('insert into t values (?,?,?,?)',[i for i in it.chain(d.keys(),*d.values())]) 
<sqlite3.Cursor object at 0x01418420> 
>>> conn.commit() 
>>> results = c.execute('select * from t where id = 0').fetchall() 
>>> results 
[(0, 1.0, 2.0, 3.0)] 
+0

Значит, столбцы должны быть названы (например, a, b, c) для 165 элементов? И также мне нужен призыв вставки, чтобы иметь вопросительные знаки на 165 вопросов? Нет ли способа сделать это без жесткого кодирования? –

+0

Нет, не сложно. Вы можете использовать '['.join (i) для i в it.permutations (string.lowercase, 2)]' для генерации имен столбцов, а затем использовать интерполяцию строк. Затем вы можете использовать '', ". Join ('?' * 165). – bernie

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