Skip to content

Script Development / InfluxDB

The InfluxDB Connector is a wrapper for the Python third-party package influxdb (version 5.2.3), providing methods for querying InfluxDB. This Connector is compatible with the following databases:

  • Alibaba Cloud Time Series Database InfluxDB Edition

This Connector connects via HTTP protocol

DFF.CONN(...) parameters are as follows:

Parameter Type Required / Default Description
connector_id str Required Connector ID
database str None Specified database

.query(...)

Executes an InfluxQL statement. Parameters are as follows:

Parameter Type Required / Default Description
sql str Required InfluxQL statement, which can include placeholder bind parameters in the form of $var_name
bind_params dict None Bind parameters
database str None Specified database for this query
dict_output dict False Automatically converts returned data to {column name: value} format
Example
1
2
3
sql = 'SELECT * FROM demo WHERE city = $city LIMIT 5'
bind_params = {'city': 'hangzhou'}
result = db.query(sql, bind_params=bind_params, database='demo')
Output Example
1
# {'series': [{'columns': ['time', 'city', 'hostname', 'status', 'value'], 'name': 'demo', 'values': [['2018-12-31T16:00:10Z', 'hangzhou', 'webserver', 'UNKNOW', 90], ['2018-12-31T16:00:20Z', 'hangzhou', 'jira', 'running', 40], ['2018-12-31T16:00:50Z', 'hangzhou', 'database', 'running', 50], ['2018-12-31T16:01:00Z', 'hangzhou', 'jira', 'stopped', 40], ['2018-12-31T16:02:00Z', 'hangzhou', 'rancher', 'UNKNOW', 90]]}]}
Example 2 (Specify dictionary format for returned results)
1
2
3
sql = 'SELECT * FROM demo WHERE city = $city LIMIT 5'
bind_params = {'city': 'hangzhou'}
result = db.query(sql, bind_params=bind_params, database='demo', dict_output=True)
Output Example
1
# {'series': [[{'city': 'hangzhou', 'hostname': 'webserver', 'status': 'UNKNOW', 'time': '2018-12-31T16:00:10Z', 'value': 90}, {'city': 'hangzhou', 'hostname': 'jira', 'status': 'running', 'time': '2018-12-31T16:00:20Z', 'value': 40}, {'city': 'hangzhou', 'hostname': 'database', 'status': 'running', 'time': '2018-12-31T16:00:50Z', 'value': 50}, {'city': 'hangzhou', 'hostname': 'jira', 'status': 'stopped', 'time': '2018-12-31T16:01:00Z', 'value': 40}, {'city': 'hangzhou', 'hostname': 'rancher', 'status': 'UNKNOW', 'time': '2018-12-31T16:02:00Z', 'value': 90}]]}

.query2(...)

The query2(...) method is also used to execute InfluxQL statements, but uses question marks ? as parameter placeholders. Parameters are as follows:

Parameter Type Required / Default Description
sql str Required InfluxQL statement, which can include parameter placeholders.
? indicates parameters that need escaping;
?? indicates parameters that do not need escaping
sql_params list None InfluxQL parameters
database str None Specified database for this query
dict_output dict False Automatically converts returned data to {"column name": "value"} format
Example
1
2
3
sql = 'SELECT * FROM ?? WHERE city = ? LIMIT 5'
sql_params = ['demo', 'hangzhou']
result = db.query2(sql, sql_params=sql_params, dict_output=True)

Dynamic SQL Statements

query2(...) internally uses DFF.SQL(...) to construct SQL statements and supports constructing complex dynamic SQL statements.

For example, WHERE IN (...) with an uncertain number of values, or INSERT INTO ... VALUES ... for batch data insertion.

For more details, refer to Script Development / SQL Construction DFF.SQL

.write_point(...)

Added in version 1.1.13

Writes a single data point. Parameters are as follows:

Parameter Type Required / Default Description
measurement str Required Measurement
fields dict{str: str/int/float/bool} Required Fields
Key must be str
Value can be str/int/float/bool
tags dict{str: str} None Tags
Both key and value must be str
timestamp str/int None Time
ISO format, e.g., 2020-01-01T01:02:03Z
UNIX timestamp, e.g., 1577840523
database str None Specified database for this write operation
Example
1
2
3
fields = { 'cpu': 100, 'mem': 0.5 }
tags   = { 'host': 'web001' }
result = db.write_point(measurement='host_monitor', fields=fields, tags=tags)

.write_points(...)

Added in version 1.1.13

Writes multiple data points in a batch. Parameters are as follows:

Parameter Type Required / Default Description
points list Required Array of data points
points[#]['measurement'] str Required Measurement
points[#]['fields'] dict{str: str/int/float/bool} Required Fields
Key must be str
Value can be str/int/float/bool
points[#]['tags'] dict{str: str} None Tags
Both key and value must be str
points[#]['time'] str/int None Time
ISO format, e.g., 2020-01-01T01:02:03Z
UNIX timestamp, e.g., 1577840523
database str None Specified database for this write operation
Example
1
2
3
4
5
6
7
8
points = [
    {
        'measurement': 'host_monitor',
        'fields'     : { 'cpu': 100, 'mem': 0.5 },
        'tags'       : { 'host': 'web001' },
    }
]
result = db.write_points(points)