Skip to content

ArmstrongJ/sostore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sostore

SQLite Object Store - An absurdly simple object "database" for Python

sostore is a straightforward storage engine for storing and retrieving dictionaries from an SQLite database. Much of the terminology is taken from MongoDB as this engine was originally designed to replace a PyMongo implementation.

This library may seem trivial because it very much is. However, some others may need a super-lightweight dictionary store. Linking of objects within the database is not supported unless explicitly handled by the developer.

sostore is almost certainly not performant. It can be thread-safe as long as Collection objects aren't passed around between threads as they contain sqlite3.Connection objects.

Requirements

sostore should work with Python 2.6 and higher, including Python 3.x.

Documentation

Documentation for sostore can be found, in Spinx-compatible format, in the docs folder. The docs can be viewed directly at:

http://sostore.readthedocs.org/en/latest/

Usage

Inserting

>>> import sostore
>>> collection = sostore.Collection("peoples")
>>> d = {"name": "Margaux LaFleur", "hair color":"black"}
>>> d = collection.insert(d)
>>>

Retrieval

>>> d = collection.get(1)
>>> print(d)
{'_id': 1, 'name': 'Margaux LaFleur', 'hair color': 'black'}
>>>

Retrieval by Field

>>> d = collection.find_one("name", "Margaux LaFleur")
>>> print(d)
{'_id': 1, 'name': 'Margaux LaFleur', 'hair color': 'black'}
>>> d = collection.find_one("occupation", "magician")
>>> print(d)
None
>>>

Cleanup

>>> collection.done()
>>>

Updating

>>> d = collection.get(1)
>>> d['occupation'] = "witch"
>>> collection.update(d)
>>>

Behind the Scenes

sostore uses a ridiculously simple and naive backend. Each Collection the user creates generates a new table in the database with the name of that Collection as the name of the table. The table will have two columns, "_id" and "_data." The names of these columns, however, are not particularly important to the user.

The "_id" column is an auto-incrementing primary key (unless a random id setting is enabled). The "_data" column is a text blob that contains the JSON-ified Python dictionary to be stored without the _id key.
The "_id" key is always removed on store and added back into the dictionary upon retrieval to ensure consistency.

The SQLite commands within this library use safe prepare statements and, therefore, can be assumed safe from SQLite injection attacks. However, the Collection names are not safe. You should not allow dirty Collection names to be specified under any circumstance.

That's about all there is to it.

License

sostore - SQLite Object Store Copyright (C) 2013 Jeffrey Armstrong jeffrey.armstrong@approximatrix.com

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

About

This repo is no longer maintained - please use the BitBucket link

Resources

License

Stars

Watchers

Forks

Packages

No packages published