У меня возник вопрос по правильному описанию структур данных.
Пишу библиотеку для того, чтобы раз и навсегда доступаться к SQLite удобным мне способом.
В частности, в классе присутствует и функция для чтения больших массивов данных:
# -*- coding: utf-8 -*- """ Класс для sqlite, чтобы просто работать """ import sqlite3 from pandas import DataFrame class sqlite_file (): """ Создание: sql = sqlite_file('test.db'), то есть указываем только имя файла Запись: sql.record (table = 'Имя таблицы', Поле1 = Значение1, Поле2 = Значение2) ... или, например: sql.record (table = 'config', login = 'root', password = 'bastard', enabled = 'Nope') """ def __init__ (self, filename): self.mybase = sqlite3.connect(filename) self.columns = {} self.debug = '0' # <--------------- Здесь кое-что пропущено --------------> def read (self, table, **args): """ Пример использования: mydata = sql.read (table = 'quotes', fields = ['secid', 'time', 'date', 'close', 'volume', 'oi']) а на выходе - таблица: secid time date close volume oi 0 RIU3 11:00 27.09.2013 144741 412 1223 1 RIU3 11:00 27.09.2013 144813 412 1223 ... 7 RIU3 11:00 27.09.2013 144576 412 1223 8 RIU3 11:00 27.09.2013 144683 412 1223 9 RIU3 11:00 27.09.2013 144874 412 1223 """ request = 'SELECT' for f in args['fields']: # Это если все, а если нет, то дописать!!!! request += ' [%s],' % f request = request[:-1] + ' FROM [%s]' % table try: sqlres = self.mybase.execute(request) except: print 'Empty table!' return -1 result = [] if sqlres: for res in sqlres: result.append (res) data = DataFrame (result, columns=args['fields']) return data
Все это сделано, чтобы было легко и просто обращаться потом с данными как с “массивом” - по номеру записи и имени столбца:
import mylib sql = sqlite_file('test.db') mydata = sql.read (table = 'quotes', fields = ['secid', 'time', 'date', 'close', 'volume', 'oi']) print (mydata [0]['volume'])
Вопрос: как мне сделать то же самое, но без Pandas?