Documentation for python-stdnet's DEVELOPMENT version. Get the release docs here.
Object data mapper and advanced query manager for non relational databases.
The data is owned by different, configurable back-end databases and it is accessed using a light-weight Object Data Mapper (ODM). The ODM presents a method of associating user-defined Python classes with database collections, and instances of those classes with items in their corresponding collections. Collections and items are different for different backend databases but are treated in the same way in the python language domain.
Master CI: | |
---|---|
Dev CI: | |
Documentation: | http://pythonhosted.org/python-stdnet/ |
Dowloads: | http://pypi.python.org/pypi/python-stdnet/ |
Source: | https://github.com/lsbardel/python-stdnet |
Platforms: | Linux, OS X, Windows. Python 2.6, 2.7, 3.2, 3.3, pypy |
Mailing List: | https://groups.google.com/group/python-stdnet |
Keywords: | server, database, redis, odm |
Key-valued pairs databases, also know as key-value stores, have many differences from traditional relational databases, most important being they do not use SQL as their query language, storage does not require a fixed table schemas and usually they do not support complex queries.
Stdnet aims to accommodate a flexible schema and join type operations via a lightweight object data mapper. Importantly, it is designed with large data sets in mind. You pull data you need, nothing more, nothing less. Bandwidth and server round-trips can be reduced to the bare minimum so that your application is fast and memory efficient.
To install, download, uncompress and type:
python setup.py install
otherwise use easy_install:
easy_install python-stdnet
or pip:
pip install python-stdnet
To know which version you have installed:
>>> import stdnet
>>> stdnet.__version__
'0.8.0'
>>> stdnet.VERSION
stdnet_version(major=0, minor=8, micro=0, releaselevel='final', serial=1)
Backend data-stores are the backbone of the library. Currently the list is limited to
The stdnet.odm module is the ODM, it maps python objects into database data and vice-versa. It is design to be fast and safe to use:
from stdnet import odm
class Base(odm.StdModel):
'''An abstract model. This won't have any data in the database.'''
name = odm.SymbolField(unique = True)
ccy = odm.SymbolField()
def __unicode__(self):
return self.name
class Meta:
abstract = True
class Instrument(Base):
itype = odm.SymbolField()
class Fund(Base):
description = odm.CharField()
class PositionDescriptor(odm.StdModel):
dt = odm.DateField()
size = odm.FloatField()
price = odm.FloatField()
position = odm.ForeignKey("Position", index=False)
class Position(odm.StdModel):
instrument = odm.ForeignKey(Instrument, related_name='positions')
fund = odm.ForeignKey(Fund)
history = odm.ListField(model=PositionDescriptor)
def __unicode__(self):
return '%s: %s @ %s' % (self.fund,self.instrument,self.dt)
Register models with backend:
models = orm.Router('redis://localhost?db=1')
models.register(Instrument)
models.register(Fund)
models.register(PositionDescriptor,'redis://localhost?db=2')
models.register(Position,'redis://localhost?db=2')
And play with the API:
>>> f = models.fund.new(name="pluto, description="The pluto fund", ccy="EUR")
>>> f
Fund: pluto
At the moment, only redis back-end is available and therefore to run tests you need to install Redis. If you are using linux, it can be achieved simply by downloading, uncompressing and running make, if you are using windows you can find sources from MSOpenTech.
Requirements for running tests:
To run tests open a shell and launch Redis. On another shell, from within the python-stdnet package directory, type:
python runtests.py
Tests are run against a local redis server on port 6379 and database 7 by default. To change the server and database where to run tests pass the --server option as follow:
python runtests.py --server redis://myserver.com:6450?db=12&password=bla
For more information type:
python runtests.py -h
Development of stdnet happens at Github: http://github.com/lsbardel/python-stdnet
We very much welcome your contribution of course. To do so, simply follow these guidelines: