PyDbLite 3.0.4
PyDbLite, a fast, pure-Python in-memory database
License: BSD
Keywords: Python database engine SQLite

.. |build-status| image:: https://api.travis-ci.org/bendikro/PyDbLite.svg?branch=master
    :target: https://travis-ci.org/bendikro/PyDbLite

.. |docs| image:: https://readthedocs.org/projects/pydblite/badge/?version=latest
    :target: https://pydblite.readthedocs.org
    :alt: Documentation Status

.. |pypi| image:: http://img.shields.io/pypi/v/pydblite.png
    :alt: PYPI Package
    :target: https://pypi.python.org/pypi/PyDbLite

PyDbLite
=============

PyDbLite is

* a fast, pure-Python, untyped, in-memory database engine, using
  Python syntax to manage data, instead of SQL
* a pythonic interface to SQLite using the same syntax as the
  pure-Python engine for most operations (except database connection
  and table creation because of each database specificities)

PyDbLite is suitable for a small set of data where a fully fledged DB would be overkill.

Supported Python versions: 2.6+

Build status: |build-status|

Read the documentation: |docs|

Installation
---------------

PIP
~~~~~~~~~

.. code-block:: bash

    pip install pydblite

Manually
~~~~~~~~~

Download the source and execute

.. code-block:: bash

    python setup.py install


Changelog
*********


3.0.4 (2016-04-17)
==================

* Added functions `__enter__()
  <api.rst#pydblite.sqlite.Database.__enter__>`_ and `__exit__()
  <api.rst#pydblite.sqlite.Database.__exit__>`_ to `Database
  <api.rst#pydblite.sqlite.Database>`_


3.0.3 (2016-04-02)
==================

* Fixed bug where db_filter argument of function `_len()
  <api.rst#pydblite.sqlite.Table._len>`_, `get_unique_ids()
  <api.rst#pydblite.sqlite.Table.get_unique_ids>`_, and
  `get_group_count() <api.rst#pydblite.sqlite.Table.get_group_count>`_
  was ignored if filter returns 0 matches.


3.0.2 (2015-04-18)
==================

* Fixed bug (#1) in Base where calling `db.create()
  <api.rst#pydblite.pydblite._Base.create>`_ without supplying a value
  for the "mode" parameter with give an error.


3.0.1 (2015-02-23)
==================

* Fixed bug in Base where opening existing database would fail.


3.0 (2014-09-18)
================

Note: Some changes in this release are not backwards compatible with
2.X versions.

* pydblite and sqlite are rewritten to use a common Filter object.

* Tests have been improved and standardised in `Unit tests
  <http://pydblite.readthedocs.org/en/latest/unittests.html>`_.

* Updated `Example code
  <http://pydblite.readthedocs.org/en/latest/examples.html>`_.

* Renamed module and package names to lower case according to `PEP 8
  <https://www.python.org/dev/peps/pep-0008>`_

* Converted to UNIX line endings and follow `PEP 8
  <https://www.python.org/dev/peps/pep-0008>`_ code style.

* MySQL adapter has been dropped until it can be tested with unit
  tests.


2.6
===

* if db exists, read field names on instance creation

* allow add_field on an instance even if it was not open()

* attribute path is the path of the database in the file system (was
  called "name" in previous versions)

* attribute name is the base name of the database, without the
  extension

* adapt code to run on Python 2 and Python 3


2.5
===

* test is now in folder "test"

* SQLite changes:

  * many changes to support "legacy" SQLite databases

    * no control on types declared in CREATE TABLE or ALTER TABLE

    * no control on value types in INSERT or UPDATE

    * no version number in records

  * add methods to specify a conversion function for fields after a
    SELECT

  * change names to be closer to SQLite names

    * a class Database to modelise the database

    * a class Table (not Base) for each table in the database


2.4
===

* add BSD Licence

* raise exception if unknown fields in insert


2.3
===

* introduce syntax (db('name')>'f') & (db('age') == 30)


2.2
===

* add __contains__