{"id":19589507,"url":"https://github.com/javidjms/influxable","last_synced_at":"2025-10-06T03:49:14.190Z","repository":{"id":41416662,"uuid":"199220377","full_name":"Javidjms/influxable","owner":"Javidjms","description":"A lightweight python ORM / ODM / Client for InfluxDB","archived":false,"fork":false,"pushed_at":"2024-01-11T19:59:26.000Z","size":491,"stargazers_count":40,"open_issues_count":10,"forks_count":12,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-04-14T22:48:09.781Z","etag":null,"topics":["client","driver","influxdb","odm","orm","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Javidjms.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-27T22:53:48.000Z","updated_at":"2025-03-27T05:16:04.000Z","dependencies_parsed_at":"2024-11-11T08:19:31.581Z","dependency_job_id":"2f60da44-97c4-47b5-81f3-6fb7a2b8a0ba","html_url":"https://github.com/Javidjms/influxable","commit_stats":{"total_commits":693,"total_committers":5,"mean_commits":138.6,"dds":"0.028860028860028808","last_synced_commit":"fba3bfe8d0e13cd49a724152ebd0a5b4e80931f8"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Javidjms%2Finfluxable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Javidjms%2Finfluxable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Javidjms%2Finfluxable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Javidjms%2Finfluxable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Javidjms","download_url":"https://codeload.github.com/Javidjms/influxable/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251138932,"owners_count":21541976,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","driver","influxdb","odm","orm","python"],"created_at":"2024-11-11T08:18:49.582Z","updated_at":"2025-10-06T03:49:09.137Z","avatar_url":"https://github.com/Javidjms.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":".. figure:: ./artwork/logo.svg\n   :alt:\n\nInfluxable\n==========\n\n|pypi version| |build status| |code coverage| |license: MIT|\n\nA lightweight python ORM / ODM / Client for InfluxDB\n\nTable of Contents\n-----------------\n\n-  `Note \u003c#note\u003e`__\n-  `Genesis \u003c#genesis\u003e`__\n-  `Changelog \u003c#changelog\u003e`__\n-  `Features \u003c#features\u003e`__\n-  `Dependencies \u003c#dependencies\u003e`__\n-  `Installation \u003c#installation\u003e`__\n-  `Getting started \u003c#getting-started\u003e`__\n\n   -  `Connection \u003c#connection\u003e`__\n   -  `Measurement \u003c#measurement\u003e`__\n   -  `Simple Measurement \u003c#simple-measurement\u003e`__\n   -  `Instanciation \u003c#instanciation\u003e`__\n   -  `Query \u003c#query\u003e`__\n   -  `Saving Data \u003c#saving-data\u003e`__\n\n-  `Auto Generation of Measurements \u003c#auto-generation-of-measurements\u003e`__\n-  `Influxable commands \u003c#influxable-commands\u003e`__\n-  `Influxable API \u003c#influxable-api\u003e`__\n\n   -  `Influxable Class \u003c#influxable-class\u003e`__\n   -  `InfluxDBApi Class \u003c#influxdbapi-class\u003e`__\n   -  `Connection Class \u003c#connection-class\u003e`__\n   -  `Measurement Class \u003c#measurement-class\u003e`__\n   -  `Attributes \u003c#attributes\u003e`__\n   -  `InfluxDBResponse \u003c#influxdbresponse\u003e`__\n   -  `Serializers \u003c#serializers\u003e`__\n   -  `Raw Query \u003c#raw-query\u003e`__\n   -  `Query Class \u003c#query-class\u003e`__\n   -  `Query aggregations function \u003c#query-aggregations-function\u003e`__\n   -  `Query selectors function \u003c#query-selectors-function\u003e`__\n   -  `Query transformations function \u003c#query-transformations-function\u003e`__\n   -  `InfluxDBAdmin \u003c#influxdbadmin\u003e`__\n   -  `Exceptions \u003c#exceptions\u003e`__\n\n-  `Testing \u003c#testing\u003e`__\n-  `Supporting \u003c#supporting\u003e`__\n-  `Versioning \u003c#versioning\u003e`__\n-  `Contributors \u003c#contributors\u003e`__\n-  `Credits \u003c#credits\u003e`__\n-  `References \u003c#references\u003e`__\n-  `License \u003c#license\u003e`__\n\nNote\n----\n\nThis project is currently in development.\n\nA better documentation and testing scripts will be added in the next release.\n\nGenesis\n-------\n\nI worked on a project with InfluxDB. I needed to build an API for InfluxDB and to plug with Python libraries (scipy, pandas, etc ...).\n\nThat's why I decided to create this repository in order to deal with InfluxDB in a smooth way and to manipulate Python object.\n\nChangelog\n---------\n\n1.4.0\n~~~~~\n\n-  Add integration with Influxdb OSS 2.0 Authentication (Experimental)\n\n1.3.0\n~~~~~\n\n-  Add *group\\_by()* method for *GROUP BY tags* instructions\n\n-  Add *range()* method for *GROUP BY time()* instructions\n\n-  Add *into()* method for *INTO* instructions\n\n-  Add *tz()* method\n\n1.2.1\n~~~~~\n\n-  Handle chinese characters.\n\nFeatures\n--------\n\n-  Add automation for measurement class generation (command: *autogenerate*)\n\n-  Admin commands allowing to manage the database (ex: *create\\_user()*, *show\\_series()*).\n\n-  Measurement class allowing to make queries in order to fetch/save points (ex: *Measurement.where()*, *Measurement.bulk\\_save()*).\n\n-  Group by commands\n\n-  Different serializers for easy data manipulation (ex: *PandasSerializer*).\n\nDependencies\n------------\n\n-  Python 3 (Tested with Python 3.7.3)\n\n-  InfluxDB (Tested with InfluxDB 1.5.4)\n\nInstallation\n------------\n\nThe package is available in pypi. You can install it via pip :\n\n::\n\n    pip install influxable\n\nGetting started\n---------------\n\nConnection\n~~~~~~~~~~\n\nYou can set your environment variable for the connection of InfluxDB in order to override the default values :\n\n::\n\n    INFLUXDB_URL=http://localhost:8086\n    INFLUXDB_DATABASE_NAME=default\n\n    #Optional\n    INFLUXDB_USER=admin\n    INFLUXDB_PASSWORD=changme\n    INFLUXDB_PASSWORD=changme\n\n    # OSS 2.0\n    INFLUXDB_AUTH_TOKEN=mytoken\n\nThen you just have to import the influxable package and create an instance of *Influxable* :\n\n.. code:: python\n\n    from influxable import Influxable\n\n    client = Influxable()\n\nYou can also set connection variable in *Influxable* constructor :\n\n.. code:: python\n\n    # Without authentication\n\n    client = Influxable(\n        base_url='http://localhost:8086',\n        database_name='default',\n    )\n\n    # With authentication\n\n    client = Influxable(\n        base_url='http://localhost:8086',\n        database_name='default',\n        user='admin',\n        password='changeme',\n    )\n\n    # With token authentication\n\n    client = Influxable(\n        base_url='http://localhost:8086',\n        database_name='default',\n        token='my_token',\n    )\n\nMeasurement\n~~~~~~~~~~~\n\n.. code:: python\n\n    from influxable import attributes, serializers\n    from influxable.measurement import Measurement\n\n    class TemperatureMeasurement(Measurement):\n        parser_class = serializers.MeasurementPointSerializer # Default\n        measurement_name = 'temperature'\n\n        time = attributes.TimestampFieldAttribute()\n        phase = attributes.TagFieldAttribute()\n        value = attributes.FloatFieldAttribute()\n\nFields :\n\n-  GenericFieldAttribute (IntegerFieldAttribute, FloatFieldAttribute, StringFieldAttribute, BooleanFieldAttribute)\n\n-  TagFieldAttribute\n\n-  TimestampFieldAttribute, DateTimeFieldAttribute\n\nParser Classes :\n\n-  MeasurementPointSerializer (default)\n\n-  JsonSerializer\n\n-  FormattedSerieSerializer\n\n-  FlatFormattedSerieSerializer\n\n-  FlatSimpleResultSerializer\n\n-  PandasSerializer\n\nSimple Measurement\n~~~~~~~~~~~~~~~~~~\n\n.. code:: python\n\n    from influxable.measurement import SimpleMeasurement\n\n    my_measurement = SimpleMeasurement('temperature', ['value'], ['phase'])\n\nInstanciation\n~~~~~~~~~~~~~\n\n.. code:: python\n\n    point = TemperatureMeasurement(\n      time=1568970572,\n      phase=\"HOT\",\n      value=23.5,\n    )\n\nQuery\n~~~~~\n\nYou can query with *Measurement.get\\_query()* :\n\n.. code:: python\n\n    from influxable.db import Field\n\n    points = TemperatureMeasurement\\\n      .get_query()\\\n      .select('phase', 'value')\\\n      .where(\n         Field('value') \u003e 15.2,\n         Field('value') \u003c 30.5,\n      )\\\n      .limit(100)\n      .evaluate()\n\nYou can also query with *Query* :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n\n    points = Query()\\\n      .select('phase', 'value')\\\n      .from_measurements('temperature')\\\n      .where(\n         Field('value') \u003e 15.2,\n         Field('value') \u003c 30.5,\n      )\\\n      .limit(100)\n      .execute()\n\nSaving Data\n~~~~~~~~~~~\n\nYou can create data by using *Measurement.bulk\\_save()*\n\n.. code:: python\n\n    points = [\n        TemperatureMeasurement(phase=\"HOT\",value=10,time=1463289075),\n        TemperatureMeasurement(phase=\"COLD\",value=10,time=1463289076),\n    ]\n    TemperatureMeasurement.bulk_save(points)\n\nYou can also create data with *BulkInsertQuery*\n\n.. code:: python\n\n    str_query = '''\n    temperature,phase=HOT value=10 1463289075000000000\n    temperature,phase=COLD value=10 1463289076000000000\n    '''\n\n    raw_query = BulkInsertQuery(str_query)\n    res = raw_query.execute()\n\nIntegration with OSS 2.0 (Experimental)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: bash\n\n    # Create the user\n    influx user create --name admin -- password admin\n\n    # Create the auth (in order to retrieve the token)\n    influx auth create --user admin --operator\n\n    # List yours tokens\n    influx auth list\n\n    # (Optional) export the INFLUXDB_AUTH_TOKEN\n    INFLUXDB_AUTH_TOKEN=my-token\n\n    # Create the config\n    influx config create --config-name defaut --host-url http://localhost:8086 --token NjIYagimNbX5MaZfisDsvuGGvtULdqIY-Wt8EP4eGk-3P9KftDtZjxXU4GocTMTfM0eglkuFJQyA9uF82ZeEoA== --org MyOrganisation\n\n    # Create the bucket\n    influx bucket create --name default\n\n    # List your bucket\n    influx bucket list\n\n    ID          Name        Retention   Shard group duration    Organization ID     Schema Type\n    4688727b9c388f5f    default     infinite    168h0m0s        b89cbec9670f29f8    implicit\n\n    # Create the dbrp (link database api v1 with bucket api v2)\n    influx v1 dbrp create --db default --rp default --bucket-id  4688727b9c388f5f --default\n\nAuto Generation of Measurements\n-------------------------------\n\nYou can automatically generate measurement classes file with the bash command *autogenerate*\n\n.. code:: bash\n\n    influxable autogenerate #(default to auto_generate_measurement.py)\n    influxable autogenerate -o measurement.py\n\nHere is the output generated file :\n\n.. code:: python\n\n    # auto_generate_measurement.py\n\n    from influxable import attributes\n    from influxable.measurement import Measurement\n\n\n    class CpuMeasurement(Measurement):\n        measurement_name = 'cpu'\n\n        time = attributes.TimestampFieldAttribute(precision='s')\n        value = attributes.FloatFieldAttribute()\n        host = attributes.TagFieldAttribute()\n\nInfluxable commands\n-------------------\n\n-  *autogenerate* : automatic generation of measurement classes\n\n.. code:: bash\n\n    influxable autogenerate #(default to auto_generate_measurement.py)\n    influxable autogenerate -o measurement.py\n\n-  *populate* : create a measurement filled with a set of random data\n\n.. code:: bash\n\n    influxable populate\n    influxable populate --min_value 5 --max_value 35 -s 2011-01-01T00:00:00 -id 1\n    influxable populate --help\n\nInfluxable API\n--------------\n\nInfluxable Class\n~~~~~~~~~~~~~~~~\n\nThe Influxable main app class is a singleton. You can access it via the method *Influxable.get\\_instance()*\n\n\\_\\_init\\_\\_():\n^^^^^^^^^^^^^^^\n\n-  base\\_url : url to connect to the InfluxDB server (default = 'http://localhost:8086')\n\n-  user : authentication user name (default = 'admin')\n\n-  password : authentication user password (default = 'changeme')\n\n-  database\\_name : name of the database (default = 'default')\n\ncreate\\_connection() -\u003e Connection:\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  base\\_url : url to connect to the InfluxDB server (default = 'http://localhost:8086')\n\n-  user : authentication user name (default = 'admin')\n\n-  password : authentication user password (default = 'changeme')\n\n-  database\\_name : name of the database (default = 'default')\n\nping() -\u003e bool:\n^^^^^^^^^^^^^^^\n\n-  verbose : enables verbose mode (default = True)\n\nexecute\\_query() -\u003e json():\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  query: influxdb query to execute\n-  method: http method of the request (default='get')\n-  chunked: if enabled, responses will be chunked by series or by every 10,000 points (default=False)\n-  epoch: specified precision of the timestamp [ns,u,µ,ms,s,m,h] (default='ns')\n-  pretty: if enadble, the json response is pretty-printed (default=False)\n\nwrite\\_points() -\u003e bool:\n^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  points: data to write in InfluxDB line protocol format\n\nex: mymeas,mytag1=1 value=21 1463689680000000000\n\n-  precision: specified precision of the timestamp [ns,u,µ,ms,s,m,h] (default='ns')\n-  consistency: sets the write consistency for the point [any,one,quorum,all] (default='all')\n-  retention\\_policy\\_name: sets the target retention policy for the write (default='DEFAULT')\n\nInfluxDBApi Class\n~~~~~~~~~~~~~~~~~\n\nget\\_debug\\_requests() -\u003e bool:\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  request : instance of InfluxDBRequest\n\nget\\_debug\\_vars() -\u003e bool:\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  request : instance of InfluxDBRequest\n\nping() -\u003e bool:\n^^^^^^^^^^^^^^^\n\n-  request : instance of InfluxDBRequest\n\n-  verbose : enables verbose mode (default = True)\n\nexecute\\_query() -\u003e json():\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  request : instance of InfluxDBRequest\n-  query: influxdb query to execute\n-  method: http method of the request (default='get')\n-  chunked: if enabled, responses will be chunked by series or by every 10,000 points (default=False)\n-  epoch: specified precision of the timestamp [ns,u,µ,ms,s,m,h] (default='ns')\n-  pretty: if enadble, the json response is pretty-printed (default=False)\n\nwrite\\_points() -\u003e bool:\n^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  request : instance of InfluxDBRequest\n\n-  points: data to write in InfluxDB line protocol format\n\nex: mymeas,mytag1=1 value=21 1463689680000000000\n\n-  precision: specified precision of the timestamp [ns,u,µ,ms,s,m,h] (default='ns')\n-  consistency: sets the write consistency for the point [any,one,quorum,all] (default='all')\n-  retention\\_policy\\_name: sets the target retention policy for the write (default='DEFAULT')\n\nConnection Class\n~~~~~~~~~~~~~~~~\n\n\\_\\_init\\_\\_():\n^^^^^^^^^^^^^^^\n\n-  base\\_url : url to connect to the InfluxDB server (default = 'http://localhost:8086')\n\n-  user : authentication user name (default = 'admin')\n\n-  password : authentication user password (default = 'changeme')\n\n-  database\\_name : name of the database (default = 'default')\n\ncreate() -\u003e Connection:\n^^^^^^^^^^^^^^^^^^^^^^^\n\n-  base\\_url : url to connect to the InfluxDB server (default = 'http://localhost:8086')\n\n-  user : authentication user name (default = 'admin')\n\n-  password : authentication user password (default = 'changeme')\n\n-  database\\_name : name of the database (default = 'default')\n\nMeasurement Class\n~~~~~~~~~~~~~~~~~\n\nfields\n^^^^^^\n\nMust be an instance of class located in *influxable.attributes*\n\n-  GenericFieldAttribute\n\n-  IntegerFieldAttribute\n\n-  FloatFieldAttribute\n\n-  StringFieldAttribute\n\n-  BooleanFieldAttribute\n\n-  TagFieldAttribute\n\n-  TimestampFieldAttribute\n\n-  DateTimeFieldAttribute\n\nExample :\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n\n        time = TimestampFieldAttribute(auto_now=True, precision='s')\n        phase = TagFieldAttribute()\n        value = IntegerFieldAttribute()\n\nparser\\_class\n^^^^^^^^^^^^^\n\nMust be a class of *influxable.serializers* :\n\n-  MeasurementPointSerializer (default)\n\n-  JsonSerializer\n\n-  FormattedSerieSerializer\n\n-  FlatFormattedSerieSerializer\n\n-  FlatSimpleResultSerializer\n\n-  PandasSerializer\n\nmeasurement\\_name\n^^^^^^^^^^^^^^^^^\n\nName of the measurement in InfluxDB\n\n\\_\\_init\\_\\_():\n^^^^^^^^^^^^^^^\n\nSet the attribute value of a Measurement\n\nExample\n\n.. code:: python\n\n    point = MySensorMeasurement(value=0.5, phase=\"MOON\")\n\nget\\_query() -\u003e Query:\n^^^^^^^^^^^^^^^^^^^^^^\n\nReturn an instance of Query which\n\nExample\n\n.. code:: python\n\n    points = MySensorMeasurement\\\n      .get_query()\\\n      .select()\\\n      .where()\\\n      .limit()\\\n      .evaluate()\n\ndict()\n^^^^^^\n\nReturn a dict of the point values\n\nExample\n\n.. code:: python\n\n    point = MySensorMeasurement(value=0.5, phase=\"MOON\")\n\n    point.dict()\n\n    # {'time': Decimal('1568970572'), 'phase': 'MOON', 'value': 0.5}\n\nitems()\n^^^^^^^\n\nReturn an item list of the point values\n\nExample\n\n.. code:: python\n\n    point = MySensorMeasurement(value=0.5, phase=\"MOON\")\n\n    point.items()\n\n    # dict_items([('time', Decimal('1568970572')), ('phase', 'MOON'), ('value', 0.5)])\n\nbulk\\_save()\n^^^^^^^^^^^^\n\nSave a list of measurement point\n\n.. code:: python\n\n    points = [\n        MySensorMeasurement(phase=\"moon\",value=5,time=1463489075),\n        MySensorMeasurement(phase=\"moon\",value=7,time=1463489076),\n        MySensorMeasurement(phase=\"sun\",value=8,time=1463489077),\n    ]\n    MySensorMeasurement.bulk_save(points)\n\nAttributes\n~~~~~~~~~~\n\nGenericFieldAttribute\n^^^^^^^^^^^^^^^^^^^^^\n\n-  attribute\\_name : real name of the measurement attribute in database\n\n-  default : set a default value if it is not filled at the instanciation\n\n-  is\\_nullable : if False, it will raise an error if the value is null (default=True)\n\n-  enforce\\_cast : if False, it will not raise an error when the value has not the desired type without casting (default=True).\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n\n        temperature_value = GenericFieldAttribute(\n          attribute_name=\"temp_v1\",\n          default=\"15\",\n          is_nullable=True,\n          enforce_cast=False,\n        )\n\nIntegerFieldAttribute\n^^^^^^^^^^^^^^^^^^^^^\n\n-  min\\_value : an error is raised if the value is less than the min\\_value\n\n-  max\\_value : an error is raised if the value is greater than the max\\_value\n\n-  attribute\\_name : real name of the measurement attribute in database\n\n-  default : set a default value if it is not filled at the instanciation\n\n-  is\\_nullable : if False, it will raise an error if the value is null (default=True)\n\n-  enforce\\_cast : if False, it will not raise an error when the value has not the desired type without casting (default=True).\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n\n        temperature_value = IntegerFieldAttribute(\n          min_value=10,\n          max_value=30,\n        )\n\nFloatFieldAttribute\n^^^^^^^^^^^^^^^^^^^\n\n-  max\\_nb\\_decimals : set the maximal number of decimals to display\n\n-  min\\_value : an error is raised if the value is less than the min\\_value\n\n-  max\\_value : an error is raised if the value is greater than the max\\_value\n\n-  attribute\\_name : real name of the measurement attribute in database\n\n-  default : set a default value if it is not filled at the instanciation\n\n-  is\\_nullable : if False, it will raise an error if the value is null (default=True)\n\n-  enforce\\_cast : if False, it will not raise an error when the value has not the desired type without casting (default=True).\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n\n        value = FloatFieldAttribute(\n          max_nb_decimals=5,\n        )\n\nStringFieldAttribute\n^^^^^^^^^^^^^^^^^^^^\n\n-  choices : an error is raised if the value is not in the list of string options\n\n-  max\\_length : an error is raised if the string value length is greater than the max\\_length\n\n-  attribute\\_name : real name of the measurement attribute in database\n\n-  default : set a default value if it is not filled at the instanciation\n\n-  is\\_nullable : if False, it will raise an error if the value is null (default=True)\n\n-  enforce\\_cast : if False, it will not raise an error when the value has not the desired type without casting (default=True).\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n\n        position = FloatFieldAttribute(\n          choices=['first', 'last'],\n          max_length=7,\n        )\n\nBooleanFieldAttribute\n^^^^^^^^^^^^^^^^^^^^^\n\n-  attribute\\_name : real name of the measurement attribute in database\n\n-  default : set a default value if it is not filled at the instanciation\n\n-  is\\_nullable : if False, it will raise an error if the value is null (default=True)\n\n-  enforce\\_cast : if False, it will not raise an error when the value has not the desired type without casting (default=True).\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n\n        is_marked = BooleanFieldAttribute(\n          default=False,\n        )\n\nTagFieldAttribute\n^^^^^^^^^^^^^^^^^\n\n-  attribute\\_name : real name of the measurement attribute in database\n\n-  default : set a default value if it is not filled at the instanciation\n\n-  is\\_nullable : if False, it will raise an error if the value is null (default=True)\n\n-  enforce\\_cast : if False, it will not raise an error when the value has not the desired type without casting (default=True).\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n\n        phase = TagFieldAttribute(\n          default='MOON',\n        )\n\nTimestampFieldAttribute\n^^^^^^^^^^^^^^^^^^^^^^^\n\n-  auto\\_now : Set automatically the current date (default=False)\n\n-  precision : Set the timestamp precision which must be one of [ns,u,ms,s,m,h] (default= 'ns')\n\n-  attribute\\_name : real name of the measurement attribute in database\n\n-  default : set a default value if it is not filled at the instanciation\n\n-  is\\_nullable : if False, it will raise an error if the value is null (default=True)\n\n-  enforce\\_cast : if False, it will not raise an error when the value has not the desired type without casting (default=True).\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n\n        time = TimestampFieldAttribute(\n          auto_now=True,\n          precision='s',\n        )\n\nDateTimeFieldAttribute\n^^^^^^^^^^^^^^^^^^^^^^\n\n-  str\\_format : Set the arrow format of the timestamp to display (default: \"YYYY-MM-DD HH:mm:ss\")\n\n-  auto\\_now : Set automatically the current date\n\n-  precision : Set the timestamp precision which must be one of [ns,u,ms,s,m,h]\n\n-  attribute\\_name : real name of the measurement attribute in database\n\n-  default : set a default value if it is not filled at the instanciation\n\n-  is\\_nullable : if False, it will raise an error if the value is null (default=True)\n\n-  enforce\\_cast : if False, it will not raise an error when the value has not the desired type without casting (default=True).\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n\n        date = DateTimeFieldAttribute(\n          attribute_name='time',\n          auto_now=True,\n          str_format='YYYY-MM-DD',\n        )\n\nInfluxDBResponse\n~~~~~~~~~~~~~~~~\n\n\\_\\_init\\_\\_():\n^^^^^^^^^^^^^^^\n\n-  raw\\_json : the raw json response object\n\nraw\n^^^\n\nReturn the raw\\_json value\n\nmain\\_serie\n^^^^^^^^^^^\n\nReturn the first serie from the *series* field in the raw\\_json value\n\nseries\n^^^^^^\n\nReturn the *series* field in the raw\\_json value\n\nerror\n^^^^^\n\nReturn the *error* field in the raw\\_json value\n\nExample of json raw response :\n\n.. code:: python\n\n    {\n       \"results\":[\n          {\n             \"statement_id\":0,\n             \"series\":[\n                {\n                   \"name\":\"mymeas\",\n                   \"columns\":[\n                      \"time\",\n                      \"myfield\",\n                      \"mytag1\",\n                      \"mytag2\"\n                   ],\n                   \"values\":[\n                      [\n                         \"2017-03-01T00:16:18Z\",\n                         33.1,\n                         null,\n                         null\n                      ],\n                      [\n                         \"2017-03-01T00:17:18Z\",\n                         12.4,\n                         \"12\",\n                         \"14\"\n                      ]\n                   ]\n                }\n             ]\n          }\n       ]\n    }\n\nSerializers\n~~~~~~~~~~~\n\nSerializers can be used in *parser\\_class* field of *Measurement* class.\n\n.. code:: python\n\n    class MySensorMeasurement(Measurement):\n        measurement_name = 'mysensor'\n        parser_class = serializers.BaseSerializer\n\nIt allow to change the output response format of a influxb request\n\n.. code:: python\n\n    # res is formatted with BaseSerializer\n    res = MySensorMeasurement.get_query().limit(10).evaluate()\n\nBaseSerializer\n^^^^^^^^^^^^^^\n\n.. code:: python\n\n    # res is formatted with BaseSerializer\n    res\n    {'results': [{'statement_id': 0, 'series': [{'name': 'mysamplemeasurement', 'columns': ['time', 'value'], 'values': [[1570481055000000000, 10], [1570481065000000000, 20], [1570481075000000000, 30]]}]}]}\n\nJsonSerializer\n^^^^^^^^^^^^^^\n\n.. code:: python\n\n    # res is formatted with JsonSerializer\n    res\n    '{\"results\": [{\"statement_id\": 0, \"series\": [{\"name\": \"mysamplemeasurement\", \"columns\": [\"time\", \"value\"], \"values\": [[1570481055000000000, 10], [1570481065000000000, 20], [1570481075000000000, 30]]}]}]}'\n\nFormattedSerieSerializer\n^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n    # res is formatted with FormattedSerieSerializer\n    res\n    [{'mysamplemeasurement': [{'time': 1570481055000000000, 'value': 10}, {'time': 1570481065000000000, 'value': 20}, {'time': 1570481075000000000, 'value': 30}]}]\n\nFlatFormattedSerieSerializer\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n    # res is formatted with FlatFormattedSerieSerializer\n    [{'time': 1570481055000000000, 'value': 10}, {'time': 1570481065000000000, 'value': 20}, {'time': 1570481075000000000, 'value': 30}]\n\nFlatSimpleResultSerializer\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThis serializer is used only when the result set contains only one column\n\n.. code:: python\n\n    res = InfluxDBAdmin.show_databases()\n\n    # res is formatted with FlatSimpleResultSerializer\n    res\n    ['_internal', 'example', 'test', 'telegraf', 'mydb', ...]\n\nFlatSingleValueSerializer\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThis serializer is used only when the result set contains only one value\n\n.. code:: python\n\n    res = InfluxDBAdmin.show_measurement_cardinality()\n\n    # res is formatted with FlatSingleValueSerializer\n    res\n    2\n\nPandasSerializer\n^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n    # res is formatted with PandasSerializer\n    res                   time  value\n    0  1570481055000000000     10\n    1  1570481065000000000     20\n    2  1570481075000000000     30\n\nMeasurementPointSerializer\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThis is the default serializer class for Measurement\n\n.. code:: python\n\n    [\u003cMySensorMeasurement object at 0x7f49a16227f0\u003e, \u003cMySensorMeasurement object at 0x7f49a16228d0\u003e, \u003cMySensorMeasurement object at 0x7f49a1622438\u003e]\n\nRaw Query\n~~~~~~~~~\n\n-  str\\_query\n\nExample :\n\n.. code:: python\n\n    from influxable.db import RawQuery\n    str_query = 'SHOW DATABASES'\n    res = RawQuery(str_query).execute()\n\n.. code:: python\n\n    from influxable.db import RawQuery\n    str_query = 'SELECT * FROM temperature LIMIT 10'\n    res = RawQuery(str_query).execute()\n\nQuery Class\n~~~~~~~~~~~\n\nYou can generate an instance of Query via the initial Query constructor or from a measurement.\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query\n    query = Query()\n    ...\n\n.. code:: python\n\n    query = MySensorMeasurement.get_query()\n    ...\n\nMethods :\n\nfrom\\_measurements()\n^^^^^^^^^^^^^^^^^^^^\n\n-  \\*measurements\n\nExample :\n\n.. code:: python\n\n    query = Query()\\\n      .from_measurements('measurement1', 'measurement2')\n\nRender :\n\n.. code:: sql\n\n    FROM measurement1, measurement2\n\nselect()\n^^^^^^^^\n\n-  \\*fields\n\nExample :\n\n.. code:: python\n\n    query = Query()\\\n      .select('param1', 'param2')\\\n      .from_measurements('measurement1')\n\nRender :\n\n.. code:: sql\n\n    SELECT value, phase\n\nwhere()\n^^^^^^^\n\n-  \\*criteria\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .select('param1', 'param2')\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\n\nRender :\n\n.. code:: sql\n\n    WHERE param1 \u003e 800 AND param1 \u003c 900\n\nlimit()\n^^^^^^^\n\n-  value\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .select('param1', 'param2')\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .limit(10)\n\nRender :\n\n.. code:: sql\n\n    LIMIT 10\n\nslimit()\n^^^^^^^^\n\n-  value\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .select('param1', 'param2')\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .limit(10)\\\n      .slimit(5)\n\nRender :\n\n.. code:: sql\n\n    SLIMIT 5\n\noffset()\n^^^^^^^^\n\n-  value\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .select('param1', 'param2')\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .offset(10)\n\nRender :\n\n.. code:: sql\n\n    OFFSET 10\n\nsoffset()\n^^^^^^^^^\n\n-  value\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .select('param1', 'param2')\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .offset(10)\\\n      .soffset(5)\n\nRender :\n\n.. code:: sql\n\n    SOFFSET 5\n\ninto()\n^^^^^^\n\n-  \\*measurement\n\nExample :\n\n.. code:: python\n\n    query = Query()\\\n      .select('param1')\\\n      .from_measurements('measurement1')\\\n      .into('measurement2')\n\nRender :\n\n.. code:: sql\n\n    SELECT param1 INTO measurement2 FROM measurement1\n\nasc()\n^^^^^\n\nExample :\n\n.. code:: python\n\n    query = Query()\\\n      .select('param1')\\\n      .from_measurements('measurement1')\\\n      .asc()\n\nRender :\n\n.. code:: sql\n\n    SELECT param1 FROM measurement1 ORDER BY ASC\n\ndesc()\n^^^^^^\n\nExample :\n\n.. code:: python\n\n    query = Query()\\\n      .select('param1')\\\n      .from_measurements('measurement1')\\\n      .desc()\n\nRender :\n\n.. code:: sql\n\n    SELECT param1 FROM measurement1 ORDER BY DESC\n\ntz()\n^^^^\n\nExample :\n\n.. code:: python\n\n    query = Query()\\\n      .select('param1')\\\n      .from_measurements('measurement1')\\\n      .tz('Europe/Paris')\n\nRender :\n\n.. code:: sql\n\n    SELECT param1 FROM measurement1 tz('Europe/Paris')\n\ngroup\\_by()\n^^^^^^^^^^^\n\n-  \\*tags\n\nExample :\n\n.. code:: python\n\n    query = Query()\\\n      .select('param1')\\\n      .from_measurements('measurement1')\\\n      .group_by('tag_1')\n\nRender :\n\n.. code:: sql\n\n    SELECT param1 FROM measurement1 GROUP BY tag_1\n\nrange\\_by()\n^^^^^^^^^^^\n\n-  \\*interval\n-  \\*shift\n-  \\*fill\n-  \\*tags\n\nExample :\n\n.. code:: python\n\n    query = Query()\\\n      .select('param1')\\\n      .from_measurements('measurement1')\\\n      .range_by('12s', shift='1d', tags=['tag1'], fill=3)\n\nRender :\n\n.. code:: sql\n\n    SELECT param1 FROM measurement1 GROUP BY time(12s,1d),tag1 fill(3)'\n\nexecute()\n^^^^^^^^^\n\nExecute the query and return the response\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    res = Query()\\\n      .select('param1', 'param2')\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .execute()\n    res\n\nResult :\n\n.. code:: python\n\n    {'results': [{'statement_id': 0, 'series': [{'name': 'measurement1', 'columns': ['time', 'value'], 'values': [[1570481055000000000, 10], [1570481065000000000, 20], [1570481075000000000, 30]]}]}]}\n\nevaluate()\n^^^^^^^^^^\n\nExecute the query and return the serialized response\n\n-  parser\\_class (default=BaseSerializer for Query and MeasurementPointSerializer for Measurement)\n\nExample with Query :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    res = Query()\\\n      .select('param1', 'param2')\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .evaluate()\n    res\n\nResult :\n\n.. code:: python\n\n    {'results': [{'statement_id': 0, 'series': [{'name': 'measurement1', 'columns': ['time', 'value'], 'values': [[1570481055000000000, 10], [1570481065000000000, 20], [1570481075000000000, 30]]}]}]}\n\nExample with Measurement :\n\n.. code:: python\n\n    from influxable.db import Field\n    points = MySensorMeasurement.get_query()\n      .select('param1', 'param2')\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .evaluate()\n    points\n\nResult :\n\n.. code:: python\n\n    [\u003cMySensorMeasurement object at 0x7f49a16227f0\u003e, \u003cMySensorMeasurement object at 0x7f49a16228d0\u003e, \u003cMySensorMeasurement object at 0x7f49a1622438\u003e]\n\ncount()\n^^^^^^^\n\n-  value (default='\\*')\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .count()\n\nRender :\n\n.. code:: sql\n\n    SELECT COUNT(*)\n\ndistinct()\n^^^^^^^^^^\n\n-  value (default='\\*')\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .distinct()\n\nRender :\n\n.. code:: sql\n\n    SELECT DISTINCT(*)\n\nintegral()\n^^^^^^^^^^\n\n-  value (default='\\*')\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .integral()\n\nRender :\n\n.. code:: sql\n\n    SELECT INTEGRAL(*)\n\nmean()\n^^^^^^\n\n-  value (default='\\*')\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .mean()\n\nRender :\n\n.. code:: sql\n\n    SELECT MEAN(*)\n\nmedian()\n^^^^^^^^\n\n-  value (default='\\*')\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .median()\n\nRender :\n\n.. code:: sql\n\n    SELECT MEDIAN(*)\n\nmode()\n^^^^^^\n\n-  value (default='\\*')\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .mode()\n\nRender :\n\n.. code:: sql\n\n    SELECT MODE(*)\n\nspread()\n^^^^^^^^\n\n-  value (default='\\*')\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .spread()\n\nRender :\n\n.. code:: sql\n\n    SELECT SPREAD(*)\n\nstd\\_dev()\n^^^^^^^^^^\n\n-  value (default='\\*')\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .std_dev()\n\nRender :\n\n.. code:: sql\n\n    SELECT STDDEV(*)\n\nsum()\n^^^^^\n\n-  value (default='\\*')\n\nExample :\n\n.. code:: python\n\n    from influxable.db import Query, Field\n    query = Query()\\\n      .from_measurements('measurement1')\\\n      .where(\n          Field('param1') \u003e 800,\n          Field('param1') \u003c 900,\n      )\\\n      .sum()\n\nRender :\n\n.. code:: sql\n\n    SELECT SUM(*)\n\nQuery aggregations function\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nUsage :\n\n.. code:: python\n\n    from influxable.db.function import aggregations\n    res = Query()\\\n        .select(aggregations.Sum('value'))\\\n        .from_measurements('param1')\\\n        .execute()\n\nCount\n^^^^^\n\nDistinct\n^^^^^^^^\n\nIntegral\n^^^^^^^^\n\nMean\n^^^^\n\nMedian\n^^^^^^\n\nMode\n^^^^\n\nSpread\n^^^^^^\n\nStdDev\n^^^^^^\n\nSum\n^^^\n\nQuery selectors function\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nUsage :\n\n.. code:: python\n\n    from influxable.db.function import selectors\n    res = Query()\\\n        .select(selectors.Min('value'), selectors.Max('value'))\\\n        .from_measurements('param1')\\\n        .execute()\n\nBottom\n^^^^^^\n\nFirst\n^^^^^\n\nLast\n^^^^\n\nMax\n^^^\n\nMin\n^^^\n\nPercentile\n^^^^^^^^^^\n\nSample\n^^^^^^\n\nTop\n^^^\n\nQuery transformations function\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nUsage :\n\n.. code:: python\n\n    from influxable.db.function import selectors, transformations\n    res = Query()\\\n        .select(transformations.Abs('value'))\\\n        .from_measurements('param1')\\\n        .execute()\n\n.. code:: python\n\n    from influxable.db.function.selectors import Min, Max\n    from influxable.db.function.transformations import Abs\n    res = Query()\\\n        .select(Abs(Min('value')), Abs(Max('value')))\\\n        .from_measurements('param1')\\\n        .execute()\n\nAbs\n^^^\n\nACos\n^^^^\n\nASin\n^^^^\n\nATan\n^^^^\n\nATan2\n^^^^^\n\nCeil\n^^^^\n\nCos\n^^^\n\nCumulativeSum\n^^^^^^^^^^^^^\n\nDerivative\n^^^^^^^^^^\n\nDifference\n^^^^^^^^^^\n\nElapsed\n^^^^^^^\n\nExp\n^^^\n\nFloor\n^^^^^\n\nHistogram\n^^^^^^^^^\n\nLn\n^^\n\nLog\n^^^\n\nLog2\n^^^^\n\nLog10\n^^^^^\n\nMovingAverage\n^^^^^^^^^^^^^\n\nNonNegativeDerivative\n^^^^^^^^^^^^^^^^^^^^^\n\nNonNegativeDifference\n^^^^^^^^^^^^^^^^^^^^^\n\nPow\n^^^\n\nRound\n^^^^^\n\nSin\n^^^\n\nSqrt\n^^^^\n\nTan\n^^^\n\nInfluxDBAdmin\n~~~~~~~~~~~~~\n\nalter\\_retention\\_policy()\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  policy\\_name\n\n-  duration (default=None)\n\n-  replication (default=None)\n\n-  shard\\_duration (default=None)\n\n-  is\\_default (default=False)\n\n.. code:: sql\n\n    ALTER RETENTION POLICY {policy_name} ON {database_name} [DURATION {duration} REPLICATION {replication} SHARD DURATION {shard_duration} DEFAULT]\n\ncreate\\_database()\n^^^^^^^^^^^^^^^^^^\n\n-  new\\_database\\_name\n\n-  duration (default=None)\n\n-  replication (default=None)\n\n-  shard\\_duration (default=None)\n\n-  policy\\_name (default=False)\n\n.. code:: sql\n\n    CREATE DATABASE {new_database_name} [WITH DURATION {duration} REPLICATION {replication} SHARD DURATION {shard_duration} NAME {policy_name}]\n\ncreate\\_retention\\_policy()\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  policy\\_name\n\n-  duration (default=None)\n\n-  replication (default=None)\n\n-  shard\\_duration (default=None)\n\n-  is\\_default (default=False)\n\n.. code:: sql\n\n    CREATE RETENTION POLICY {policy_name} ON {database_name} [DURATION {duration} REPLICATION {replication} SHARD DURATION {shard_duration} DEFAULT]\n\ncreate\\_subscription()\n^^^^^^^^^^^^^^^^^^^^^^\n\n-  subscription\\_name\n\n-  hosts\n\n-  any (default=False)\n\n.. code:: sql\n\n    CREATE SUBSCRIPTION {subscription_name} ON {database_name} DESTINATIONS ANY/ALL {hosts}\n\ncreate\\_user()\n^^^^^^^^^^^^^^\n\n-  user\\_name\n\n-  password\n\n-  with\\_privileges (default=False)\n\n.. code:: sql\n\n    CREATE USER {user_name} WITH PASSWORD {password} [WITH ALL PRIVILEGES]\n\ndelete()\n^^^^^^^^\n\n-  measurements (default=[])\n\n-  criteria (default=[])\n\n.. code:: sql\n\n    DELETE FROM {measurements} WHERE {criteria}\n\ndrop\\_continuous\\_query()\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  query\\_name\n\n.. code:: sql\n\n    DROP CONTINUOUS QUERY {query_name} ON {database_name}\n\ndrop\\_database()\n^^^^^^^^^^^^^^^^\n\n-  database\\_name\\_to\\_delete\n\n.. code:: sql\n\n    DROP DATABASE {database_name_to_delete}\n\ndrop\\_measurement()\n^^^^^^^^^^^^^^^^^^^\n\n-  measurement\\_name\n\n.. code:: sql\n\n    DROP MEASUREMENT {measurement_name}\n\ndrop\\_retention\\_policy()\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  policy\\_name\n\n.. code:: sql\n\n    DROP RETENTION POLICY {policy_name} ON {database_name}\n\ndrop\\_series()\n^^^^^^^^^^^^^^\n\n-  measurements (default=[])\n\n-  criteria (default=[])\n\n.. code:: sql\n\n    DROP SERIES FROM {measurements} WHERE {criteria}\n\ndrop\\_subscription()\n^^^^^^^^^^^^^^^^^^^^\n\n-  subscription\\_name\n\n.. code:: sql\n\n    DROP SUBSCRIPTION {subscription_name} ON {full_database_name}\n\ndrop\\_user()\n^^^^^^^^^^^^\n\n-  user\\_name\n\n.. code:: sql\n\n    DROP USER {user_name}\n\nexplain()\n^^^^^^^^^\n\n-  query\n\n-  analyze (default=False)\n\n.. code:: sql\n\n    EXPLAIN [ANALYZE] {query}\n\ngrant()\n^^^^^^^\n\n-  privilege\n\n-  user\\_name\n\n.. code:: sql\n\n    GRANT {privilege} ON {database_name} TO {user_name}\n\nkill()\n^^^^^^\n\n-  query\\_id\n\n.. code:: sql\n\n    KILL QUERY {query_id}\n\nrevoke()\n^^^^^^^^\n\n-  privilege\n\n-  user\\_name\n\n.. code:: sql\n\n    REVOKE {privilege} ON {database_name} FROM {user_name}\n\nshow\\_field\\_key\\_cardinality()\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  exact (default=False)\n\n.. code:: sql\n\n    SHOW FIELD KEY [EXACT] CARDINALITY\n\nshow\\_measurement\\_cardinality()\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  exact (default=False)\n\n.. code:: sql\n\n    SHOW MEASUREMENT [EXACT] CARDINALITY\n\nshow\\_series\\_cardinality()\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  exact (default=False)\n\n.. code:: sql\n\n    SHOW SERIES [EXACT] CARDINALITY\n\nshow\\_tag\\_key\\_cardinality()\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n-  key\n\n-  exact (default=False)\n\n.. code:: sql\n\n    SHOW TAG VALUES [EXACT] CARDINALITY WITH KEY = {key}\n\nshow\\_continuous\\_queries()\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW CONTINUOUS QUERIES\n\nshow\\_diagnostics()\n^^^^^^^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW DIAGNOSTICS\n\nshow\\_field\\_keys()\n^^^^^^^^^^^^^^^^^^^\n\n-  measurements (default=[])\n\n.. code:: sql\n\n    SHOW FIELD KEYS FROM {measurements}\n\nshow\\_grants()\n^^^^^^^^^^^^^^\n\n-  user\\_name\n\n.. code:: sql\n\n    SHOW GRANTS FOR {user_name}\n\nshow\\_databases()\n^^^^^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW DATABASES\n\nshow\\_measurements()\n^^^^^^^^^^^^^^^^^^^^\n\n-  criteria (default=[])\n\n.. code:: sql\n\n    SHOW MEASUREMENTS WHERE {criteria}\n\nshow\\_queries()\n^^^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW QUERIES\n\nshow\\_retention\\_policies()\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW RETENTION POLICIES\n\nshow\\_series()\n^^^^^^^^^^^^^^\n\n-  measurements (default=[])\n\n-  criteria (default=[])\n\n-  limit (default=None)\n\n-  offset (default=None)\n\n.. code:: sql\n\n    SHOW SERIES ON {database_name} [FROM {measurements} WHERE {criteria} LIMIT {limit} OFFSET {offset}]\n\nshow\\_stats()\n^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW STATS\n\nshow\\_shards()\n^^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW SHARDS\n\nshow\\_shard\\_groups()\n^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW SHARD GROUPS\n\nshow\\_subscriptions()\n^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW SUBSCRIPTIONS\n\nshow\\_tag\\_keys()\n^^^^^^^^^^^^^^^^^\n\n-  measurements (default=[])\n\n.. code:: sql\n\n    SHOW TAG KEYS [FROM {measurements}]\n\nshow\\_tag\\_values()\n^^^^^^^^^^^^^^^^^^^\n\n-  key\n\n-  measurements (default=[])\n\n.. code:: sql\n\n    SHOW TAG VALUES [FROM {measurements}] WITH KEY = {key}\n\nshow\\_users()\n^^^^^^^^^^^^^\n\n.. code:: sql\n\n    SHOW USERS\n\nExceptions\n~~~~~~~~~~\n\nInfluxDBException\n^^^^^^^^^^^^^^^^^\n\nInfluxDBError\n^^^^^^^^^^^^^\n\nInfluxDBConnectionError\n^^^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBInvalidResponseError\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBInvalidChoiceError\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBInvalidTypeError\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBInvalidURLError\n^^^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBBadRequestError\n^^^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBBadQueryError\n^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBInvalidNumberError\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBInvalidTimestampError\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBUnauthorizedError\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nInfluxDBAttributeValueError\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTesting\n-------\n\nFirst, you need to install pytest via the file *requirements-test.txt*\n\n.. code:: bash\n\n    pip install -r requirements-test.txt\n\nThen, you can launch the *pytest* command.\n\n.. code:: python\n\n    pytest -v\n\nSupporting\n----------\n\nFeel free to post issues your feedback or if you reach a problem with influxable library.\n\nIf you want to contribute, please use the pull requests section.\n\nVersioning\n----------\n\nWe use `SemVer \u003chttp://semver.org/\u003e`__ for versioning. For the versions available, see the `tags on this repository \u003chttps://github.com/Javidjms/influxable/releases\u003e`__\n\nContributors\n------------\n\n-  `Javid Mougamadou \u003chttps://github.com/Javidjms\u003e`__\n\nCredits\n-------\n\n-  Logo designed by `Maxime Bergerard \u003chttps://github.com/maximebergerard\u003e`__\n\nReferences\n----------\n\n-  `Influxdb Website \u003chttps://docs.influxdata.com/platform/introduction\u003e`__\n\n-  `Influxdb Github Repository \u003chttps://github.com/influxdata/influxdb\u003e`__\n\n-  `Influxdb-Python Github Repository \u003chttps://github.com/influxdata/influxdb-python\u003e`__\n\nLicense\n-------\n\n`MIT \u003cLICENSE.txt\u003e`__\n\n.. |pypi version| image:: https://img.shields.io/badge/pypi-1.4.0-blue\n   :target: https://pypi.org/project/influxable/\n.. |build status| image:: https://img.shields.io/badge/build-passing-green\n.. |code coverage| image:: https://img.shields.io/badge/coverage-100-green\n.. |license: MIT| image:: https://img.shields.io/badge/License-MIT-blue.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavidjms%2Finfluxable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjavidjms%2Finfluxable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavidjms%2Finfluxable/lists"}