Package: blitzdb3
Blitz-DB3BlitzDB3is a port of BlitzDB to Python 3. We're using BlitzDB on some internal projects atAbilianand needed these changes to migrate these projects to Python 3.BlitzDB, or justBlitzis a document-based, object-oriented, transactional database written purely in Python. Among other things, it provides apowerful querying language,deep indexing of documents,compressed data storageandautomatic referencing of embedded documents. It is reasonably fast, can be easily embedded in any Python application and does not have any external dependencies (except when using a third-party backend). In addition, you can use it as afrontendto other database engines such as MongoDB in case you should need more power.Key FeaturesDocument-based, object-oriented interface.Powerful and rich querying language.Deep document indexes on arbitrary fields.Compressed storage of documents.Support for multiple backends (e.g. file-based storage, MongoDB).Support for database transactions (currently only for the file-based backend).Use CasesBlitz can be used as a standalone document store for client application. Originally blitz was designed for use with thecheckmatePython code analysis toolkit, where it stores statistical data. Since blitz stores all documents as single JSON files, it is possible to put the whole database under version-control.InstallationThe easiest way to install Blitz is throughpiporeasy_installpip install blitzdb
#or...
easy_install blitzdbFor more detailed installation instructions, have a look at thedocumentation.Detailed DocumentationThe detailed documentation for this project is hosted onReadTheDocs, feel free to take a look!Roadmap3.2 (unreleased): keep fixing and upgrading.Changelog3.1: drop support for Python 2.3.0a1: Port to Python 3 using six. Cleanup and format code.Old Changelog (original Blitzdb by Andreas Dewes /andreas@7scientists.com)0.4.4: SQL backend: Do not coerce server_default values via a CAST, as this can cause incompatibilities.0.4.3: Many small improvements to the SQL backend.0.3.0: Fully functional SQL backend.0.2.12: Added support for proper attribute iteration toDocument.0.2.11: Allow setting thecollectionparameter through aDocument.Metaattribute.0.2.10: Bugfix-Release: Fix Python 3 compatibility issue.0.2.9: Bugfix-Release: Fix serialization problem with file backend.0.2.8: Addedget,has_keyandclearmethods toDocumentclass0.2.7: Fixed problem withunicodefunction in Python 3.0.2.6: Bugfix-Release: Fixed an issue with the $exists operator for the file backend.0.2.5: Bugfix-Release0.2.4: Added support for projections and update operations to the MongoDB backend.0.2.3: Bugfix-Release: Fixed bug in transaction data caching in MongoDB backend.0.2.2: Fix for slice operators in MongoDB backend.0.2.1: Better tests.0.2.0: Support for including additional information in DB references. Support for accessing document attributes as dictionary items.
Added $regex parameter that allows to use regular expressions in queries.0.1.5: MongoDB backend now supports database transactions. Database operations are now read-isolated by default, i.e.
uncommitted operations will not affect database queries before they are committed.0.1.4: Improved indexing of objects for the file backend, added support for automatic serialization/deserialization
of object attributes when adding keys to or querying an index.0.1.3: Sorting of query sets is now supported (still experimental)0.1.2: Small bugfixes, BlitzDB version number now contained in DB config dict0.1.1: BlitzDB is now Python3 compatible (thanks to David Koblas)Contributors (in alphabetical order)Current maintainer (BlitzDB3)Stefane Fermigier - @sfermigierOriginal author (BlitzDB)Andreas Dewes - @adewesOriginal contributors@bwiessnethFlorian Lehmann - @cashaddyKarskrin - @cBraugeChris Mutel - @cmutelCecil Woebker - @cwoebkerEthan Blackburn - @EthanBlackburnJavier Collado - @jcolladoJason Xie - @jxieeducationDavid Koblas - @koblasStéphane Wirtel - @matrixiseVictor Miclovich - @miclovichDmytro Kyrychuk - @orgkhnarghChristoph Neumann - @programmdesignDale - @puredistortiontjado - @tejadoThomas Ballinger - @thomasballingerTyler Kennedy - @TkTechToby Champion - @tobychThanks for all your contributions, without you BlitzDB wouldn't be what it is today :)Third-Party ContributionsFlask-BlitzDBFlask adapter for BlitzDB. Blitz + Flask = Awesome!ExamplesTo get an idea of what you can do with Blitz, here are some examples.Creating objectsfromblitzdbimportDocumentclassMovie(Document):passclassActor(Document):passthe_godfather=Movie({'name':'The Godfather','year':1972,'pk':1})marlon_brando=Actor({'name':'Marlon Brando','pk':1})al_pacino=Actor({'name':'Al Pacino','pk':1})Storing objects in the database:fromblitzdbimportFileBackendbackend=FileBackend("/path/to/my/db")the_godfather.save(backend)marlon_brando.save(backend)al_pacino.save(backend)Retrieving objects from the database:the_godfather=backend.get(Movie,{'pk':1})#or...the_godfather=backend.get(Movie,{'name':'The Godfather'})Filtering objectsmovies_from_1972=backend.filter(Movie,{'year':1972})Working with transactionsbackend.begin()the_godfather.director='Roland Emmerich'#oops...the_godfather.save()backend.rollback()#undo the changes...Creating nested object referencesthe_godfather.cast={'Don Vito Corleone':marlon_brando,'Michael Corleone':al_pacino}#Documents stored within other objects will be automatically converted to database references.marlon_brando.performances=[the_godfather]al_pacino.performances=[the_godfather]marlon_brando.save(backend)al_pacino.save(backend)the_godfather.save(backend)#Will store references to the movies within the documents in the DBCreation of database indexes and advanced queryingbackend.create_index(Actor,'performances')#Will create an index on the 'performances' field, for fast queryinggodfather_cast=backend.filter(Actor,{'movies':the_godfather})#Will return 'Al Pacino' and 'Marlon Brando'Arbitrary filter expressionsstar_wars_iv=Movie({'name':'Star Wars - Episode IV: A New Hope','year':1977})star_wars_iv.save()movies_from_the_seventies=backend.filter(Movie,{'year':lambdayear:year>=1970andyear<1980})#Will return Star Wars & The Godfather (man, what a decade!)