In [1]:
from tinydb import TinyDB, Query
db = TinyDB('db.json')

In [2]:
db.insert({'type': 'apple', 'count': 7})
db.insert({'type': 'peach', 'count': 3})


Out[2]:
2

In [3]:
db.all()


Out[3]:
[{u'count': 7, u'type': u'apple'}, {u'count': 3, u'type': u'peach'}]

In [4]:
Fruit = Query()
db.search(Fruit.type == 'peach')


Out[4]:
[{u'count': 3, u'type': u'peach'}]

In [5]:
db.search(Fruit.count > 5)


Out[5]:
[{u'count': 7, u'type': u'apple'}]

In [6]:
db.update({'count': 10}, Fruit.type == 'apple')
db.all()


Out[6]:
[{u'count': 10, u'type': u'apple'}, {u'count': 3, u'type': u'peach'}]

In [7]:
db.remove(Fruit.count < 5)
db.all()


Out[7]:
[{u'count': 10, u'type': u'apple'}]

In [8]:
db.purge()
db.all()


Out[8]:
[]

In [9]:
from tinydb import Query
User = Query()
db.search(User.name == 'John')


Out[9]:
[]

In [10]:
db.search(User.birthday.year == 1990)


Out[10]:
[]

In [11]:
# db.search(User.country-code == 'foo') is invalid syntax! instead:
db.search(User['country-code'] == 'foo')


Out[11]:
[]

In [12]:
from tinydb import where
db.search(where('field') == 'value')


Out[12]:
[]

In [13]:
# db.search(where('field') == 'value') is shorthand for:
db.search(Query()['field'] == 'value')


Out[13]:
[]

In [14]:
db.search(User.name.exists())


Out[14]:
[]

In [15]:
db.search(User.name.matches('[aZ]*'))
db.search(User.name.search('b+'))


Out[15]:
[]

In [16]:
test_func = lambda s: s == 'John'
db.search(User.name.test(test_func))


Out[16]:
[]

In [17]:
def test_func(val, m, n):
    return m <= val <= n
db.search(User.age.test(test_func,  0, 21))
db.search(User.age.test(test_func, 21, 99))


Out[17]:
[]

In [18]:
db.search(User.groups.any(Group.name == 'admin')) # member of   1+ admin group
db.search(User.groups.all(Group.name == 'admin')) # member of just admin group


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-18-2f2fa10b544e> in <module>()
----> 1 db.search(User.groups.any(Group.name == 'admin')) # member of   1+ admin group
      2 db.search(User.groups.all(Group.name == 'admin')) # member of just admin group

NameError: name 'Group' is not defined

In [19]:
db.search(User.groups.any(['admin', 'user']))
db.search(User.groups.all(['admin', 'user']))


Out[19]:
[]

In [22]:
db.search(~ User.name == 'John')


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-22-2df6e69fc8d8> in <module>()
----> 1 db.search(~ User.name == 'John')

TypeError: bad operand type for unary ~: 'Query'

In [23]:
db.search((User.name == 'John') & (User.age <= 30)) # wrap conditions in parens!


Out[23]:
[]

In [24]:
db.search((User.name == 'John') | (User.age <= 30)) # wrap conditions in parens!


Out[24]:
[]

In [25]:
db.insert_multiple([{'name': 'John', 'age': 22}, {'name': 'John', 'age': 37}])
db.insert_multiple({'int': 1, 'value': i} for i in range(2))


Out[25]:
[3, 4]

In [26]:
db.all()


Out[26]:
[{u'age': 22, u'name': u'John'},
 {u'age': 37, u'name': u'John'},
 {u'int': 1, u'value': 0},
 {u'int': 1, u'value': 1}]

In [27]:
from tinydb.operations import delete
db.update(delete('key1'), User.name == 'John')


---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-27-d460b9754cc1> in <module>()
      1 from tinydb.operations import delete
----> 2 db.update(delete('key1'), User.name == 'John')

/usr/local/lib/python2.7/site-packages/tinydb/database.pyc in update(self, fields, cond, eids)
    375             return self.process_elements(
    376                 lambda data, eid: fields(data[eid]),
--> 377                 cond, eids
    378             )
    379         else:

/usr/local/lib/python2.7/site-packages/tinydb/database.pyc in process_elements(self, func, cond, eids)
    242             for eid in list(data):
    243                 if cond(data[eid]):
--> 244                     func(data, eid)
    245                     eids.append(eid)
    246 

/usr/local/lib/python2.7/site-packages/tinydb/database.pyc in <lambda>(data, eid)
    374         if callable(fields):
    375             return self.process_elements(
--> 376                 lambda data, eid: fields(data[eid]),
    377                 cond, eids
    378             )

/usr/local/lib/python2.7/site-packages/tinydb/operations.pyc in transform(element)
      4     """
      5     def transform(element):
----> 6         del element[field]
      7 
      8     return transform

KeyError: 'key1'

In [28]:
len(db)


Out[28]:
4

In [29]:
db.get(User.name == 'John')


Out[29]:
{u'age': 22, u'name': u'John'}

In [30]:
db.get(User.name == 'Bobby')

In [31]:
db.contains(User.name == 'John')


Out[31]:
True

In [32]:
db.count(User.name == 'John')


Out[32]:
2

In [33]:
db.insert({'name': 'John', 'age': 22})


Out[33]:
5

In [34]:
el = db.get(User.name == 'John')
el.eid


Out[34]:
1

In [35]:
el = db.all()[0]
el.eid


Out[35]:
1

In [36]:
db.update({'value': 2}, eids=[1,2])
db.contains(eids=[1])


Out[36]:
True

In [37]:
db.remove(eids=[1,2])
db.get(eid=3)


Out[37]:
{u'int': 1, u'value': 0}

In [38]:
table = db.table('table_name')
table.insert({'value': True})
table.all()


Out[38]:
[{u'value': True}]

In [39]:
db.purge_table('table_name')
# db.purge_tables()

In [40]:
db.tables()


Out[40]:
{u'_default'}

In [41]:
table = db.table('table_name')
db.tables()


Out[41]:
{u'_default', u'table_name'}

In [ ]:
# 1: for a single instance only
# TinyDb(storage=SomeStorage, default_table='my-default')
# 2: for all instances
# TinyDB.DEFAULT_TABLE = 'my-default'
# table = db.table('table_name', cache_size=30)
# NOTE: cache_size set to None indicated unlimited cache

In [ ]:
# TinyDB can use JSON and in-memory, stored in JSON by default
# to use in-memory storage:
# from tinydb.storages import MemoryStorage
# db = TinyDB(storage=MemoryStorage)
# 
# can also set DEFAULT_STORAGE class variable, i.e.
# TinyDB.DEFAULT_STORAGE = MemoryStorage

In [ ]: