使用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('\n创建数据库')

client.create_database('mytestdb')

print(client.get_list_database())

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

client.switch_database('mytestdb')

print('插入表数据\n')

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('查看数据库所有表\n')

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

print('查询表记录')

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

print(rows)

print('\n删除表\n')

client.drop_measurement('table1')

print('删除数据库\n')

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

Python 使用Python远程连接并操作InfluxDB数据库的更多相关文章

  1. Java java jdbc thin远程连接并操作Oracle数据库

    JAVA jdbc thin远程连接并操作Oracle数据库 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 编码工具:Eclipse 编码平台:W ...

  2. 远程连接ejabberd的mnesia数据库

    由于服务器是server版本,所以很难直观的看到mnesia的数据.所以对于初学者来说非常的困惑. 特地在qq群中请教了别人.别人说只要pong通了就行,就能通过rpc去操作远程的mnesia数据库. ...

  3. Java连接并操作SQLServer数据库

    本人只需在项目中引入sqljdbc4.jar 包即可 ----------------------------------------- 在JAVA中如何连接SQL Server数据库 - hangh ...

  4. 远程连接云主机MySql数据库

    笔者最近在学习MySql数据库,试着远程连接阿里云主机数据库.在连接过程中遇到不少麻烦,这里总结一下过程中遇到的问题. 基本前提 先在本地电脑和远程主机上安装MySql数据库,保证数据库服务启动. 云 ...

  5. 寝室远程连接室友mysql数据库

    注意,本方法是适用于同一局域网下的远程连接 注意,本方法是适用于同一局域网下的远程连接 注意,本方法是适用于同一局域网下的远程连接 首先需要修改mysql数据库的相关配置,将user表中的host改为 ...

  6. robot_framewok自动化测试--(9)连接并操作 MySql 数据库

    连接并操作 MySql 数据库 1.mysql数据库 1.1安装mysql数据库 请参考我的另一篇文章:MYSQL5.7下载安装图文教程 1.2.准备测试数据 请参考我的另一篇文章:Mysql基础教程 ...

  7. python连接,操作 InfluxDB

    准备工作 启动服务器 执行如下命令: service influxdb start 示例如下: [root@localhost ~]# service influxdb start Starting ...

  8. python 在window 系统 连接并操作远程 oracle 数据库

    1,python 连接 oracle 需要 oracle 自身的客户端  instantclient,可以去官网下载自己需要的版本, https://www.oracle.com/technetwor ...

  9. python接口自动化测试框架实现之操作oracle数据库

    python操作oracle数据库需要使用到cx-oracle库. 安装:pip install cx-oracle python连接oracle数据库分以下步骤: 1.与oracle建立连接: 2. ...

随机推荐

  1. Html5视频播放器-VideoJS+Audio标签实现视频,音频及字幕同步播放

    一,VideoJS介绍 引用脚本,videojs很为你着想,直接cdn了,你都不需要下载这些代码放入自己的网站 <link href=”http://vjs.zencdn.net/c/video ...

  2. [Swift]LeetCode415. 字符串相加 | Add Strings

    Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2 ...

  3. [Swift]LeetCode748. 最短完整词 | Shortest Completing Word

    Find the minimum length word from a given dictionary words, which has all the letters from the strin ...

  4. 【mysql】mysql 调优之 ——执行计划 explain

    1.what is explain(explain 是个什么东东) explain(解释),在 Mysql 中 作为一个关键词,用来解释 Mysql 是如何执行语句,可以连接 select .dele ...

  5. vue-cli中webpack配置详解

    vue-cli是构建vue单页应用的脚手架,命令行输入vue init <template-name> <project-name>从而自动生成的项目模板,比较常用的模板有we ...

  6. Qt5模块简介

        原文链接:Qt5 模块简介 无意中看到这篇文章,虽然讲的不是经常用的东西,但是看了这篇文章之后,可以对qt有个大致的了解,能够清晰的知道自己想要什么,应该关注那一部分,学习了,相信以后会又很大 ...

  7. Python爬虫入门教程 25-100 知乎文章图片爬取器之一

    1. 知乎文章图片写在前面 今天开始尝试爬取一下知乎,看一下这个网站都有什么好玩的内容可以爬取到,可能断断续续会写几篇文章,今天首先爬取最简单的,单一文章的所有回答,爬取这个没有什么难度. 找到我们要 ...

  8. 通过Python、BeautifulSoup爬取Gitee热门开源项目

    一.安装 1.通过requests 对响应内容进行处理,requests.get()方法会返回一个Response对象 pip install requests 2.beautifulSoup对网页解 ...

  9. JVM(1)---虚拟机在运行期的优化策略

    1.解释器与JIT编译器 首先我们先来了解一下运行在虚拟机之上的解释器与JIT编译器.当我们的虚拟机在运行一个java程序的时候,它可以采用两种方式来运行这个java程序: 采用解释器的形式,也就是说 ...

  10. 基于spark实现并行化Apriori算法

    详细代码我已上传到github:click me 一. 实验要求         在 Spark2.3 平台上实现 Apriori 频繁项集挖掘的并行化算法.要求程序利用 Spark 进行并行计算. ...