Форум сайта python.su
Я не так давно програмирую и изначально начал большой (для меня) проэкт не зная о базах данных(mysql например) строя всё хранение данных
ч\з словарь и cPickle. Почти его закончил. Всё работает ‘вроде бы’ стабильно. Проэкт может быть запущен в реальную работу(для этого я его и писал). База предпологает хранение и динамическое редактирование данных порядка 3000 человек.
Но возникает вопрос :надёжен ли в моём случае способ хранения словаря как базы данных законсервированым ч\з cPickle или лучше подкорректировать весь код для работы с sqlite3 или с чем либо типа того?
Заранее благодарен!!
Офлайн
Кроме надежности, подумайте еще про производительность.
У вас при сохранении изменений, заново придется пиклить весь словарь и сохранять. Да и все держать в оперативной памяти (не знаю, насколько у вас много данных). Базы данных как то более для этого подходят, ИМХО. Работать с базами данных, достаточно просто.
Офлайн
Благодарен ещё раз за ответ! Не подскажите где можно найти хорошую документацию на тему sqlite в python с нуля? Искал-не нашел то что нужно! Заранее благодарен!
Офлайн
Официальная документация вполне хороша.
http://docs.python.org/library/sqlite3.html
Далее смотрите на сам язык запросов sql (если в этом трудности), например здесь:
http://www.intuit.ru/department/database/sql/
Все не так сложно, как кажется на первый взгляд. Вам всего то нужно на первое время CREATE TABLE, INSERT, SELECT, DELETE, UPDATE
Офлайн
В дополнение к igor.kaist могу сказать, что picke не всегда безболезненно переносятся на новую версию питона. Детали сильно зависят от - оно вам надо?
Офлайн
Андрей СветловХм… А с этого места можно подробнее?
В дополнение к igor.kaist могу сказать, что picke не всегда безболезненно переносятся на новую версию питона.
Офлайн
igor.kaist, при много спасиб! То что нужно!
Офлайн
ZZZ, подробней.
Pickle использует на сегодня три протокола, насколько я помню.
Текстовый (совместимый со всеми), бинарный старый и бинарный новый.
Так вот, бинарные основываются на marshal, который зависит от версии питона.
Вроде бы как сохранение простых объектов (int, str, tuple, list, dict) не приводило к неприятностям.
Неделю назад в рассылке python-dev увидел, что “простой” pickle из 2.7 не понимается 3.2.
В детали не вникал. Если нужно - прочитаю еще раз, более внимательно всю ветку.
Там, кажется, ломались строки - они начинали восприниматься как двухбайтный юникод с ожидаемыми последствиями.
Что будет дальше и влияет ли на 3.1 - не вникал. Будут держать обратную совместимость или объявят баг фичей - не знаю.
Проблема есть только с тройкой.
Офлайн
Хм… А я всегда думал, что marshal один везде… Наверное, что-то упустил.
Спасибо за разъяснение, буду иметь в виду и не буду сильно удивляться в случае проблем.
Андрей СветловДа нет, не надо. Думаю, что если мне понадобиться, я буду знать где искать. :-)
В детали не вникал. Если нужно - прочитаю еще раз, более внимательно всю ветку.
Офлайн
Нет. Как раз marshal в общем виде различается от версии к версии.
Именно поэтому .pyc для каждой версии питона разные - они представляют простой marshal кода модуля с заголовком в виде timestamp - ничего более.
Способ сохранения простых типов не меняется обычно - но Питон этому правилу старается следовать, не обещая ничего.
Офлайн