Latest posts on сохранение tuple с помощью Pickle в sqlite3 topichttps://python.su/forum/topic/2360/2008-07-17T20:11:07+03:00Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T20:11:07+03:00Tiranox14854понял вроде, i это tuple всех выбранных объектов из запроса, а objdata первый т.е. i
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T18:23:29+03:00Viper14849Внимательно посмотри что возвращает cu.fetchall() и поймёшь ;) .
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T17:54:44+03:00Tiranox14847Спасибо большое всем. Shiza вам тоже что не поленились :)<br/>Странно другое по совету Viper поставил 0 и получил ошибки а код Shiza. заработал на ура.<br/>А теперь объясните плиз почему именно 0 ?
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T17:11:43+03:00shiza14841Не поленился, запустил у себя:<br/><br/><div class="code"><pre># -*- coding: UTF8 -*-<br/>#import Object<br/>import sqlite3 as db<br/>import pickle<br/> <br/>class MapObject:<br/> def __init__(self, d):<br/> self.points = []<br/><br/>k = MapObject(2)<br/>l = MapObject(3)<br/><br/>k.points.append((10, 20))<br/>k.points.append((100, 20))<br/>k.points.append((100, 100))<br/>k.points.append((10, 100))<br/>k.points.append((10, 20))<br/>#print k.points<br/><br/><br/>c = db.connect(database="test.sqlite")<br/>cu = c.cursor()<br/><br/><br/>#print i<br/>#print type (i)<br/><br/>#запись <br/>kk = pickle.dumps(k.points,True)<br/>cu.execute("insert into objects ( iid, objdata) values (10,?)" , (db.Binary(kk),))<br/># objdata - blob <br/><br/>#чтение <br/>cu.execute("SELECT objdata FROM objects where iid = 10")<br/>for i in cu.fetchall():<br/> print i<br/> l.points = pickle.loads(i[0]) # i -> ip[0]<br/> print l.points <br/><br/>c.commit()<br/>c.close()</pre></div>В общем дело было в i, только не забывай очищать базу при экспериментах.
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T15:36:19+03:00Viper14825А без сохранения в базу нормально восстанавливает?<br/>l.points = pickle.loads(kk) выполняется без ошибок?
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T15:24:29+03:00ofigetitelno14823:)<br/>а просто запиклить и анпиклить твой объект получается (без базы)?
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T15:01:46+03:00Tiranox14822(u'(lp0\n(I10\nI20\ntp1\na(I100\nI20\ntp2\na(I100\nI100\ntp3\na(I10\nI100\ntp4\n<br/>a(I10\nI20\ntp5\na.',)<br/><type ‘tuple’><br/>Traceback (most recent call last):<br/> File “I:\map_pr3\0\test2.py”, line 31, in <module><br/> l.points = pickle.loads(i)<br/> File “C:\Python25\lib\pickle.py”, line 1374, in loads<br/> return Unpickler(file).load()<br/> File “C:\Python25\lib\pickle.py”, line 858, in load<br/> dispatch(self)<br/>KeyError: ‘\x00’<br/><br/>не получается :(
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T14:41:53+03:00Viper14820Проверить не могу но вроде должно быть так: l.points = pickle.loads(i)
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T13:41:17+03:00Tiranox14815import Object<br/>import sqlite3 as db<br/>import pickle<br/> <br/>k = MapObject(2)<br/>l = MapObject(3)<br/><br/>k.points.append((10, 20))<br/>k.points.append((100, 20))<br/>k.points.append((100, 100))<br/>k.points.append((10, 100))<br/>k.points.append((10, 20))<br/>#print k.points<br/><br/><br/>c = db.connect(database=“test.sqlite”)<br/>cu = c.cursor()<br/><br/><br/>#print i<br/>#print type (i)<br/><br/>#запись <br/>kk = pickle.dumps(k.points,True)<br/>cu.execute(“insert into objects ( iid, objdata) values (10,?)” , (db.Binary(kk),))<br/># objdata - blob <br/><br/>#чтение <br/>cu.execute(“SELECT objdata FROM objects where iid = 10”)<br/>for i in cu.fetchall():<br/> print i<br/> l.points = pickle.loads(i) #здесь ступор<br/> print l.points <br/><br/>c.commit()<br/>c.close()
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T12:41:53+03:00shiza14809Покажи - как читаешь (вообще - приведи весь код сохранения и чтения)
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T10:55:20+03:00crchemist14801може поможе <a href="http://www.python.org/doc/2.4.1/lib/pickle-protocol.html">http://www.python.org/doc/2.4.1/lib/pickle-protocol.html</a>
Общий :: Базы данных :: сохранение tuple с помощью Pickle в sqlite3
2008-07-17T10:50:08+03:00Tiranox14798День добрый всем.<br/>Первый раз работаю с модулем pickle. <br/>Задача: сохранить tuple в бинарном виде в BLOB поле базу sqlite3 и прочесть его обратно.<br/>Запись вроде асилил, при чтении ошибка: expected read buffer, tuple found<br/>Поменял на текстовый формат (False в dumps) все равно не получается.<br/>Помогите разобраться плиз.<br/><br/>import Object<br/>import sqlite3 as db<br/>import pickle<br/><br/><br/>k = Object(2)<br/><br/>k.points.append((10, 20))<br/>k.points.append((100, 20))<br/>k.points.append((100, 100))<br/>k.points.append((10, 100))<br/>k.points.append((10, 20))<br/><br/> <br/>c = db.connect(database=“test.sqlite”)<br/>cu = c.cursor()<br/><br/><br/>kk = pickle.dumps(k.points,True)<br/><br/><br/>cu.execute(“insert into objects ( iid, objdata) values (7,?)” , (db.Binary(kk),))<br/>#cu.execute(“insert into objects ( iid, objdata) values (8,?)” , (kk,))<br/><br/>c.commit()<br/>c.close()