Sqlite 2 Python с использованием временного файла Python

Я испытываю странное поведение в sqlite при использовании базы данных, хранящейся как временный файл python. По сути, запрос таблицы sqlite_master работает нормально, но запрос другой таблицы возвращает:

DatabaseError: database disk image is malformed

Исходная база данных хранится как временный файл Python:

ntf=tempfile.NamedTemporaryFile(suffix='.gdb')

Ниже приведена функция запроса.

def sqliteQ(string,filename):
'''                                                                                                                                                                                                                              
    string= query string                                                                                                                                                                                                             
    filename= string file name                                                                                                                                                                                                       
    '''
    con=sqlite.connect(filename)
    c= con.cursor()
    c.execute(string)
    out=c.fetchall()
    c.close()
    return out

Я могу успешно запросить базу данных следующим образом:

sq=db.sqliteQ("select sql from sqlite_master where type='table' and name='managements'", gdb.name)
In [13]: sq
Out[13]: 'CREATE TABLE managements (path varchar(255), name varchar(255), data varchar(50000), date date, owner varchar(64), password varchar(64), prot text)'

Однако следующее возвращает ошибку:

    In[14]: m=db.sqliteQ('select * from managements', gdb.name)
    41     con=sqlite.connect(filename)
     42     c= con.cursor()
---> 43     c.execute(string)
     44     out=c.fetchall()
     45     c.close()

/usr/lib/python2.7/dist-packages/sqlite/main.pyc in execute(self, SQL, *parms)
    242         if len(parms) == 0:
    243             # If there are no paramters, just execute the query.

--> 244             self.rs = self.con.db.execute(SQL)
    245         else:
    246             if len(parms) == 1 and \

DatabaseError: database disk image is malformed

Я могу успешно выполнить оба запроса с помощью инструмента командной строки sqlite. Любые предложения будут наиболее полезными.

Питер

ОБНОВИТЬ

Кажется, я сталкиваюсь с этой проблемой только при использовании tempfile, Я загружаю ZIP-файл и читаю прилагаемую базу данных sqlite cStringIO и писать в tempfile используя эту функцию:

def tGDB (URLo):
    mem=io.StringIO(URLo.read())
    zf=zp.ZipFile(mem)
    ntf=tempfile.NamedTemporaryFile(suffix='.gdb')
    ntf.write(zf.read(zf.namelist()[0]))
    return ntf 

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

0 ответов

Другие вопросы по тегам