非关系数据库的对象数据映射器和高级查询管理器。

python-stdnet的Python项目详细描述


用于非关系数据库的对象数据映射器和高级查询管理器。

数据属于不同的、可配置的后端数据库,并且 使用轻量级对象数据映射器(ODM)访问。ODM呈现 将用户定义的python类与数据库集合关联的方法, 以及在相应集合中包含items的类的实例。 对于不同的后端数据库,集合和项是不同的,但是 在python语言域中以相同的方式处理。

Master CI:master-build
Dev CI:dev-build
Documentation:http://pythonhosted.org/python-stdnet/
Dowloads:http://pypi.python.org/pypi/python-stdnet/
Source:https://github.com/lsbardel/python-stdnet
Mailing List:https://groups.google.com/group/python-stdnet
Keywords:server, database, cache, redis, mongo, odm

内容

Features

  • 具有标量和多值字段的模型。
  • 丰富的查询api,包括联合、交集、排除、范围等。
  • 通过后端脚本(用于redis的lua)实现最少的服务器往返。
  • 全文搜索。
  • 信号处理,以允许分离的应用程序在更改时得到通知。
  • 同步和异步数据库连接。
  • 多变量数字时间序列应用程序。
  • 异步发布/订阅应用程序。
  • 90%的测试覆盖率。
  • 完全记录在案。

Requirements

  • python 2.6、2.7、3.2、3.3和pypy。单一代码基。
  • redis-py用于redis后端。
  • mongo后端的可选pymongo
  • 使用异步连接或测试套件时可选的pulsar
  • 您需要访问Redis服务器版本2.6或更高版本和/或Mongo服务器。

Philosophy

键值对数据库,也称为键值存储,有许多不同之处 从传统的关系数据库中, 最重要的是它们不使用SQL作为查询语言, 存储不需要固定的表模式,通常它们不支持 复杂的查询。

STDNET旨在适应灵活的模式和通过连接类型操作。 轻量级对象数据映射器。 重要的是,它的设计考虑到了大数据集。你拉数据 你需要的,不多,不少。 带宽和服务器往返可以减少到最低限度 使您的应用程序快速且内存高效。

Installing

要安装、下载、解压缩并键入:

python setup.py install

否则请使用easy_install

easy_install python-stdnet

pip

pip install python-stdnet

Version Check

要知道您安装了哪个版本:

>>> import stdnet
>>> stdnet.__version__
'0.8.0'
>>> stdnet.VERSION
stdnet_version(major=0, minor=8, micro=0, releaselevel='final', serial=1)

Backends

后端数据存储是库的主干。 当前列表仅限于

Object Data Mapper

stdnet.odm模块是odm,它将python对象映射到数据库数据中 反之亦然。它的设计是快速和安全使用:

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)

向后端注册模型:

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')

并使用api:

>>> f = models.fund.new(name="pluto, description="The pluto fund", ccy="EUR")
>>> f
Fund: pluto

Running Tests

目前,只有redis后端可用,因此可以运行测试 需要安装Redis。如果您使用的是linux,可以简单地实现 如果您正在使用 您可以从MSOpenTech找到源代码。

运行测试的要求:

  • python-stdnet项目目录。
  • pulsar

要运行测试,请打开一个shell并启动redis。在另一个壳上, 在python-stdnetpackage目录中,键入:

python runtests.py

默认情况下,测试在端口6379和数据库7上的本地redis服务器上运行。 要更改运行测试的服务器和数据库,请通过--server 选项如下:

python runtests.py --server redis://myserver.com:6450?db=12&password=bla

了解更多信息体育:

python runtests.py -h

要访问测试覆盖率,您需要安装coverage包并使用以下命令运行测试:

coverage run runtests.py

以及查看覆盖率报告:

coverage html

Kudos

  • Redis只是因为这个库使用了它令人敬畏的特性。
  • SQLAlchemyDjango用于思想和api设计。

Contributing

stdnet的开发发生在github:http://github.com/lsbardel/python-stdnet

当然,我们非常欢迎你的贡献。为此,只需遵循以下指导原则:

  1. Github上的fork python stdnet
  2. 创建主题分支git checkout -b my_branch
  3. 推到您的分行git push origin my_branch
  4. https://github.com/lsbardel/python-stdnet/issues创建问题,并链接到修补程序

License

此软件在新的BSD许可下获得许可。查看许可证 文件位于顶级分发目录中,以获取完整的许可证文本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Hibernate:jpamodelgen生成java而不是类   java如何在第二次活动结束后显示广告?   javascript如何在linux或windows上将java导出到jar   java One ArrayList添加了2个不同的选项   AmazonWeb服务如何在java中使用AWS Textract检索pdf中存在的表   java为什么RecycleView中的水平项在单击时不起作用?   java计算如果存在映射   java在捕获的组上应用正则表达式   如何使用Java在MySQL的同一个表中插入来自不同类的值   java字符串中最常见的字母(大写和小写)   Spring SessionBean实例正在由java中的多个用户共享   使用Spring Boot将@WebInitParam中的值外部化   java一创建线程就开始执行(多线程)   java是安卓所需的系统权限。意图行动给你打电话?