Skip to main content

A simple, expressive elasticsearch orm

Project description

sqlorm4es

A simple and expressive (like peewee) sql-like orm for elasticsearch.

Examples

  • Defining index model in a Django way:
from sqlorm4es import *

class LogCenter(BaseModel):
    __index__ = 'lala'
    __database__ = {
        "host": "127.0.0.1:9200"
    }

    ok = Boolean(default=True)
    lineno = Integer(required=True)
    message = Text(default='xixi')
    timestamp = Date(name="@timestamp", timezone="+8")
    bigbrother = Object(
        head=Text(),
        hand=Object(
            finger=Float(),
            nail=Boolean()
        )
    )
  • Search elasticsearch in a expressive way:
res = LogCenter.select(LogCenter.ok, LogCenter.lineno, 'max(lineno)') \
    .where(((LogCenter.ok == False) & (LogCenter.message != 'error')) |
           (LogCenter.timestamp >= '2017-10-12') |
           (LogCenter.bigbrother.head >> ' ( tough; soft, medium soft ) '))\
    .execute()
  • Note that and(&)/or(|) expression in where can be nested
  • Also support group by aggregation: MAX, MIN, AVG, SUM, COUNT...
  • Also support order by, LIMIT, OFFSET:
res = LogCenter.select('max(lineno)')\
    .group_by(LogCenter.ok, LogCenter.timestamp)\
    .order_by((LogCenter.timestamp, 'asc'))\
    .execute()
  • Manipulate document like a normal python object, value will be validated when assigning it (eg. value in Date Field all stored as UTC):
new_log = LogCenter(ok=False, message='oops', timestamp='2019-10-10')
new_log.bigbrother = {
    "head": 'tough',
    "hand": {
        "finger": "long",
        "nail": "clean"
    }
}
  • Create a single document:
new_log.save()
  • Insert, Delete, Update and Index operation: Coming soon...

Install

Sqlorm4es has been packaged to pypi, so just need one simple command to install it:

pip install sqlorm4es

Elasticsearch driver

Sqlorm4es implemented a simple almost lock-free connection pool based on official Elasticsearch client. As it is lock-free, so i am not sure whether it is thread-safe, but it works fine under my own multi-thread tests :)

  • Note that if you did not set config of your model, it will use the default config as below:
config = {
    'hosts': ['127.0.0.1:9200'],
    'maxsize': 20,
    'sniff_on_start': False,
    'sniff_on_connection_fail': False,
    'sniff_timeout': .1,
    'sniffer_timeout': None,
    'retry_on_timeout': False,
    'timeout': 60,
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlorm4es-1.1.5.tar.gz (19.8 kB view details)

Uploaded Source

File details

Details for the file sqlorm4es-1.1.5.tar.gz.

File metadata

  • Download URL: sqlorm4es-1.1.5.tar.gz
  • Upload date:
  • Size: 19.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.6.5

File hashes

Hashes for sqlorm4es-1.1.5.tar.gz
Algorithm Hash digest
SHA256 e61cf8cf407e5d98a41b48f6ed14407d5635fd099853eec192635bfd70eb46bb
MD5 0b36089a4e0c0f84d2b738a3db65b32c
BLAKE2b-256 ce78906c699f38c174fb5d396979348040e6caf728e6b0b527274b68eb0ac44d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page