zoukankan      html  css  js  c++  java
  • Python 使用Python远程连接并操作InfluxDB数据库

    使用Python远程连接并操作InfluxDB数据库

    by:授客 QQ:1033553122

    实践环境

    Python 3.4.0

     

    CentOS 6 64位(内核版本2.6.32-642.el6.x86_64)

     

    influxdb-1.5.2.x86_64.rpm

    网盘下载地址:

    https://pan.baidu.com/s/1jAbY4xz5gvzoXxLHesQ-PA

     

     

    influxdb-5.0.0-py2.py3-none-any.whl

    下载地址:

    https://pypi.org/project/influxdb/#files

    下载地址:https://pan.baidu.com/s/1DQ0HGYNg2a2-VnRSBdPHmg

     

     

     

    几个重要的名词介绍

    database:数据库;

    measurement:数据库中的表;

    point:表里面的一行数据。

     

    每个行记录由time(纳秒时间戳)、字段(fields)和tags组成。

    time:每条数据记录的时间,也是数据库自动生成的主索引;

    fields:记录各个字段的值;

    tags:各种有索引的属性,一般用于where查询条件。

     

    实践代码

    #encoding:utf-8

    __author__ = 'shouke'

     

    import random

     

    from influxdb import InfluxDBClient

     

     

    client = InfluxDBClient('10.203.25.106', 8086, timeout=10) # timeout 超时时间 10秒

     

    print('获取数据库列表:')

    database_list = client.get_list_database()

    print(database_list)

     

    print(' 创建数据库')

    client.create_database('mytestdb')

    print(client.get_list_database())

     

    print(' 切换至数据库(切换至对应数据库才可以操作数据库对象) ')

    client.switch_database('mytestdb')

     

    print('插入表数据 ')

    for i in range(0, 10):

        json_body = [

            {

                "measurement": "table1",

                "tags": {

                    "stuid": "stuid1"

                },

                # "time": "2018-05-16T21:58:00Z",

                "fields": {

                    "value": float(random.randint(0, 1000))

                }

            }

        ]

        client.write_points(json_body)

     

    print('查看数据库所有表 ')

    tables = client.query('show measurements;')

     

    print('查询表记录')

    rows = client.query('select value from table1;')

    print(rows)

     

    print(' 删除表 ')

    client.drop_measurement('table1')

     

    print('删除数据库 ')

    client.drop_database('mytestdb')

     

     

    输出结果:

    获取数据库列表:

    [{'name': '_internal'}]

     

    创建数据库

    [{'name': '_internal'}, {'name': 'mytestdb'}]

     

    切换至数据库(切换至对应数据库才可以操作数据库对象)

     

    插入表数据

     

    查看数据库所有表

     

    查询表记录

    ResultSet({'('table1', None)': [{'time': '2018-05-23T11:55:55.341839963Z', 'value': 165}, {'time': '2018-05-23T11:55:55.3588771Z', 'value': 215}, {'time': '2018-05-23T11:55:55.367430575Z', 'value': 912}, {'time': '2018-05-23T11:55:55.37528554Z', 'value': 34}, {'time': '2018-05-23T11:55:55.383530082Z', 'value': 680}, {'time': '2018-05-23T11:55:55.391322174Z', 'value': 247}, {'time': '2018-05-23T11:55:55.399173622Z', 'value': 116}, {'time': '2018-05-23T11:55:55.407073805Z', 'value': 224}, {'time': '2018-05-23T11:55:55.414792607Z', 'value': 415}, {'time': '2018-05-23T11:55:55.422871017Z', 'value': 644}]})

     

    删除表

     

    删除数据库

     

    说明:

    class influxdb.InfluxDBClient(host=u'localhost', port=8086, username=u'root', password=u'root', database=None, ssl=False, verify_ssl=False, timeout=None, retries=3, use_udp=False, udp_port=4444, proxies=None)

     

    参数

    host (str) – 用于连接的InfluxDB主机名称,默认‘localhost’

    port (int) – 用于连接的Influxport端口,默认8086

    username (str) – 用于连接的用户名,默认‘root’

    password (str) – 用户密码,默认‘root’

    database (str) – 需要连接的数据库,默认None

    ssl (bool) – 使用https连接,默认False

    verify_ssl (bool) – 验证https请求的SSL证书,默认False

    timeout (int) – 连接超时时间(单位:秒),默认None,

    retries (int) – 终止前尝试次数(number of retries your client will try before aborting, defaults to 3. 0 indicates try until success)

    use_udp (bool) – 使用UDP连接到InfluxDB默认False

    udp_port (int) – 使用UDP端口连接,默认4444

    proxies (dict) – 为请求使用http(s)代理,默认 {}

     

    query(query, params=None, epoch=None, expected_response_code=200, database=None, raise_errors=True, chunked=False, chunk_size=0)

    参数:

    query (str) – 真正执行查询的字符串

    params (dict) – 查询请求的额外参数,默认{}

    epoch (str) – response timestamps to be in epoch format either ‘h’, ‘m’, ‘s’, ‘ms’, ‘u’, or ‘ns’,defaults to None which is RFC3339 UTC format with nanosecond precision

    expected_response_code (int) – 期望的响应状态码,默认 200

    database (str) – 要查询的数据库,默认数据库

    raise_errors (bool) – 查询返回错误时,是否抛出异常,默认

    chunked (bool) – Enable to use chunked responses from InfluxDB. With chunked enabled, one ResultSet is returned per chunk containing all results within that chunk

    chunk_size (int) – Size of each chunk to tell InfluxDB to use.

     

    返回数据查询结果集

     

    write_points(points, time_precision=None, database=None, retention_policy=None, tags=None, batch_size=None, protocol=u'json')

    参数

    points  由字典项组成的list,每个字典成员代表了一个

    time_precision (str) – Either ‘s’, ‘m’, ‘ms’ or ‘u’, defaults to None

    database (str) – points需要写入的数据库,默认为当前数据库

    tags (dict) – 同每个point关联的键值对,key和value都要是字符串.

    retention_policy (str) – the retention policy for the points. Defaults to None

    batch_size (int) – value to write the points in batches instead of all at one time. Useful for when doing data dumps from one database to another or when doing a massive write operation, defaults to None

    protocol (str) – Protocol for writing data. Either ‘line’ or ‘json’.

    如果操作成功,返回True

     

    query,write_points操作来说,如果操作执行未调用switch_database函数,切换到目标数据库,可以在调用query,write_points函数时,可以指定要操作的数据库,如下

    client.query('show measurements;', database='mytestdb')

    client.write_points(json_body, database='mytestdb')

     

    points参数值,可以不指定 time,这样采用influxdb自动生成的时间

        json_body = [

            {

                "measurement": "table1",

                "tags": {

                    "stuid": "stuid1"

                },

                # "time": "2018-05-16T21:58:00Z",

                "fields": {

                    "value": float(random.randint(0, 1000))

                }

            }

        ]

     

    另外,需要注意的是,influxDB使用UTC时间,所以,如果显示指定时间,需要做如下处理:

    timetuple = time.strptime(time.localtime(), '%Y-%m-%d %H:%M:%S')

    second_for_localtime_utc = int(time.mktime(timetuple)) + 1 - 8 * 3600 # UTC时间(秒)

    timetuple = time.localtime(second_for_localtime_utc)

    date_for_data = time.strftime('%Y-%m-%d', timetuple)

    time_for_data = time.strftime('%H:%M:%S', timetuple)

    datetime_for_data = date_for_data + 'T' + time_for_data + 'Z'

     

    json_body = [

    {

            "measurement": "table1",

            "tags": {

                "stuid": "stuid1"

            },

            "time": datetime_for_data,

            "fields": {

                "value": float(random.randint(0, 1000))

            }

       }

    ]

     

     

    https://influxdb-python.readthedocs.io/en/latest/api-documentation.html#influxdbclient

     

  • 相关阅读:
    结合项目实例 回顾传统设计模式(五)单例模式
    CUDA并行计算框架(二)实例相关。
    结合项目实例 回顾传统设计模式(八)模板方法模式
    结合项目实例 回顾传统设计模式(三)装饰者模式
    结合项目实例 回顾传统设计模式(十一)代理模式
    趣谈.net大型电子商务 亲~ 走过路过不要错过~
    结合项目实例 回顾传统设计模式(九)迭代器模式
    DataTable的操作类
    xslt调用自定义函数(C#/Js/Java)
    优秀的前段框架Bootstrap推荐
  • 原文地址:https://www.cnblogs.com/shouke/p/10389513.html
Copyright © 2011-2022 走看看