Уведомления

Группа в Telegram: @pythonsu

#1 Май 2, 2008 20:56:17

mario
От:
Зарегистрирован: 2007-08-04
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Словарь и BSDDB

Работаю с BSDDB.

По структуре база напоминает такое:

1:запись

Требуется перейти к нечто типо:

1:(запись, запись2, запись3)

Посоветуйте как это сделать? Учитывая, что:

self.db = value
TypeError: Data values must be of type string or None.



Офлайн

#2 Май 3, 2008 01:18:24

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Словарь и BSDDB

Pickle/cPickle?


import Pickle
self.db = Pickle.dumps(value)
value = Pickle.loads(self.db)



Отредактировано (Май 3, 2008 01:19:18)

Офлайн

#3 Май 3, 2008 07:47:06

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Словарь и BSDDB

ZZZ
Pickle/cPickle?
Тогда уж shelve



Отредактировано (Май 3, 2008 07:47:59)

Офлайн

#4 Май 3, 2008 14:23:34

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Словарь и BSDDB

1 вариант тупо через запятую завать (потом split, но зависит от задачи)
2 вариант взвести флаг DB_DUP, это позволит дублировать ключи

читай подробней в Guide to Oracle Berkeley DB for SQL Developers
раздел Iteration Over Multiple Records

попробовал поиграться, правда в офф. доках ничерта нет=)


In : from bsddb import db

In : mydb = db.DB()

In : mydb.set_flags(db.DB_DUP)

In : mydb.open(“/tmp/test2.db”, None, db.DB_HASH, db.DB_CREATE)

In : mydb.put(“num”, “1”)

In : mydb.put(“num”, “2”)

In : mydb.put(“num”, “3”)

In : mydb.put(“abc”, “a”)

In : mydb.put(“abc”, “b”)


а вот как их прочеть хз )) через курсор c.first();c.next()… не сильно красиво) разве что через bsddb.dbtables
читай
http://pybsddb.sourceforge.net/bsddb3.html
http://yeonisalive.net/python/BerkeleyDB_BBS.php
и bsddb/test/

Отредактировано (Май 3, 2008 15:17:23)

Офлайн

#5 Май 6, 2008 07:47:43

mario
От:
Зарегистрирован: 2007-08-04
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Словарь и BSDDB

Да, вывести просто: print mydb.items(), mydb.last() и так далее.

Вы меня немного не поняли - на примере у вас задано ключ:информация, так я тоже умею. Но всёравно большое спасибо.Меня интересует вопрос, как задать, чтобы было ключ:инфа:инфа2 (чтобы к инфе2 можно было тоже обратиться) …



Офлайн

#6 Май 6, 2008 15:13:06

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Словарь и BSDDB

mario
Да, вывести просто: print mydb.items(), mydb.last() и так далее.

Вы меня немного не поняли - на примере у вас задано ключ:информация, так я тоже умею. Но всёравно большое спасибо.Меня интересует вопрос, как задать, чтобы было ключ:инфа:инфа2 (чтобы к инфе2 можно было тоже обратиться) …
>>> import shelve
>>> sh = shelve.open('/tmp/mario.db')
>>> sh = ('spam', ‘eggs’)
>>> sh = ‘string here’
>>> sh = {1: ‘single’, 2: ‘couple’}
>>> sh.close()
>>> shr = shelve.open('/tmp/mario.db')
>>> shr.items()
[('key_one', ('spam', ‘eggs’)),
('key_two', ‘string here’),
('key_three', {1: ‘single’, 2: ‘couple’})]

j2a@moby:~$ file /tmp/mario.db 
/tmp/mario.db: Berkeley DB (Hash, version 8, native byte-order)



Отредактировано (Май 6, 2008 15:14:07)

Офлайн

#7 Май 7, 2008 11:30:32

mario
От:
Зарегистрирован: 2007-08-04
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Словарь и BSDDB

Спасибо вам обоим большое и толстое :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version