Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A module for a python dict that back ends on an sqlite3 database. It's bit like shelve but with json and sqlite3.

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .travis.yml
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.mdwn
Octocat-spinner-32 TODO.txt
Octocat-spinner-32 __init__.py
Octocat-spinner-32 runtests.py
Octocat-spinner-32 setup.py
Octocat-spinner-32 withsqlite.py
README.mdwn

withsqlite

withsqlite - uses an sqlite db as a back end for a dict-like object, kind of like shelve but with json and sqlite3.

Copyright 2011-2013 James Vasile Released under the GNU General Public License, version 3 or later. See https://www.gnu.org/licenses/gpl-3.0.html for terms.

Repo is at http://github.com/jvasile/withsqlite. Patches welcome!

This file was developed as part of planeteria http://github.com/jvasile/planeteria

Backends a dict on an sqlite db. This class aims to present like a dict wherever it can.

USE

import sqlite_db from withsqlite with sqlite_db("filename") as db: db['aaa'] = {'test':'ok'} print db.items()

Specify a table to have one sqlite db hold multiple dicts:

with sqlite_db("filename", table="fruit") as db: db['citrus'] = ['orange', 'grapefruit'] print db.items()

If you change the dict in any way, its state will differ from the state of the sqlite database. Changes are committed to disk when you close the database connection, manually call commit, or (if you've set autocommit to True) after each assignment.

KNOWN LIMITATION:

vals are json serialized before being written, so if you can't serialize it, you can't put it in the dict.

Unimplemented mapping API: See in TODO.txt

Examples

>>> with sqlite_db("test") as db:
...    db.clear()
...    db.items()
... 
[]
>>> with sqlite_db("test") as db:
...    db['a']="test"
...    db.items()
... 
[(u'a', u'test')]
>>> with sqlite_db("test") as db:
...    db['as']="test"
...    db.items()
... 
[(u'a', u'test'), (u'as', u'test')]
>>> with sqlite_db("test") as db:
...    db['b']=[1,2,3,4,5]
...    del db['b']
... 
>>> with sqlite_db("test") as db:
...    db.items()
...    len(db)
... 
[(u'a', u'test'), (u'as', u'test')]
2
>>> with sqlite_db("test") as db:
...    db.keys()
... 
[u'a', u'as']
>>> with sqlite_db("test") as db:
...    db.values()
... 
[u'test', u'test']
>>> with sqlite_db("test") as db:
...    db.get('b',5)
... 
5
>>> with sqlite_db("test") as db:
...    db.get('b')
... 
>>> with sqlite_db("test") as db:
...    db.get('c',5)
... 
5
>>> with sqlite_db("test") as db:
...    'as' in db
... 
True
>>> with sqlite_db("test") as db:
...    'asdf' not in db
... 
True
>>> with sqlite_db("test") as db:
...    db.has_key('as')
...
True
>>> 
Something went wrong with that request. Please try again.