Metadata-Version: 1.1
Name: sqlitent
Version: 0.2.1
Summary: namedtuples inside set-like sqlite databases
Home-page: https://github.com/digitalmensch/sqlitent
Author: Tobias Ammann
Author-email: UNKNOWN
License: MIT
Download-URL: https://pypi.python.org/pypi/sqlitent
Description: sqlitent - namedtuples inside sqlite databases
        ==============================================
        sqlitent provides a set-like interface on top of SQLite_. Values can
        be None, int, float, str, and bytes. Tuple types are distinguished by
        name (case sensitive!) and number of fields. Documentation_.
        
        sqlitent was inspired by sqlitedict_ and kv_.
        
        Example
        -------
        
        ::
        
            >>> from collections import namedtuple
            >>> from sqlitent import sqlitent, fuzzy
            >>> db = sqlitent('database.sqlite', autocommit=True)
            >>>
            >>> Point = namedtuple('Point', ['x', 'y'])
            >>> p1 = Point(11, y=22)
            >>> p1
            Point(x=11, y=22)
            >>> p2 = p._replace(x=33)
            Point(x=33, y=22)
            >>> Car = namedtuple('Car', [
            ...     'brand',
            ...     'model',
            ...     'configuration',
            ...     'hp',
            ... ])
            >>> c = Car('Audi', 'A1', 'Sport 1.8 TFSI S tronic', 192)
            >>> c
            Car(brand='Audi', model='A1', configuration='Sport 1.8 TFSI S tronic', hp=192)
            >>> db.register(Point, Car)  # necessary to read tuples
        
        In addition to the methods which the set type provides, there are convenience
        methods (insert, delete) that handle multiple tuples at once.
        
        ::
        
            >>> db.add(p1)
            >>> db.remove(p1)
            >>> db.insert(p1, p2)
            >>> db.delete(p1, p2)
            >>> db.insert([p1], [[p1], p2])
            >>> db.insert(c)
            >>> db.insert([c, p1])  # tuples may be of different types
        
        Of course, sqlitent also supports membership checking and counting:
        
        ::
        
            >>> d = c._replace(configuration='1.6 TDI S tronic', hp=116)
            >>> d in db
            False
            >>> len(db)
            3
            >>> db.insert(d)
            >>> d in db
            True
            >>> len(db)  # ...now we have 4 unique tuples in the database.
            4
        
        There are various ways to retreive tuples from the database:
        
        ::
        
            >>> p3 = db.one(Point)  # not deterministic
            >>> p3
            Point(x=11, y=22)
            >>> p3 = db.one(p3)  # deterministic (since p3 is fully specified)
            >>> p3 in db
            True
            >>> db.pop(p3)  # remove and return
            Point(x=11, y=22)
            >>> p3 in db
            False
            >>> db.pop(Point)  # not deterministic
            Point(x=33, y=22)
            >>> db.pop(Point)  # returns None since there are no more Point tuples
            >>>
        
        Obviously there are also functions to retrieve or pop multiple values out
        of the database. sqlitent also supports fuzzy matching on text fields and
        filter functions:
        
        ::
        
            >>> cs = db.many(Car)  # get all cars
            >>> cs
            <generator object _sqlitent_iter at 0x10f39bb48>
            >>> list(cs)
            [Car(brand='Audi', model='A1', configuration='Sport 1.8 TFSI S tronic', hp=192),
             Car(brand='Audi', model='A1', configuration='1.6 TDI S tronic', hp=116)]
            >>> d = list(db.popmany(Car, configuration=fuzzy('%TDI%')))
            >>> any(x in db for x in d)  # we removed all TDI cars from the database
            False
            >>> list(db.many(Car, hp=lambda v: v > 150))
            [Car(brand='Audi', model='A1', configuration='Sport 1.8 TFSI S tronic', hp=192)]
            >>> list(db.many(Car, brand='Kia'))
            []
        
        
        This library is MIT licensed.
        
        
        .. _Sqlite: https://sqlite.org/
        .. _Documentation: https://digitalmensch.github.io/sqlitent/
        .. _sqlitedict: https://github.com/RaRe-Technologies/sqlitedict
        .. _kv: https://github.com/mgax/kv
        .. _code: https://github.com/digitalmensch/sqlitent
        
Keywords: sqlite,persistent set,namedtuple
Platform: any
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Database :: Front-Ends
