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('\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数据库的更多相关文章
- Java java jdbc thin远程连接并操作Oracle数据库
JAVA jdbc thin远程连接并操作Oracle数据库 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 编码工具:Eclipse 编码平台:W ...
- 远程连接ejabberd的mnesia数据库
由于服务器是server版本,所以很难直观的看到mnesia的数据.所以对于初学者来说非常的困惑. 特地在qq群中请教了别人.别人说只要pong通了就行,就能通过rpc去操作远程的mnesia数据库. ...
- Java连接并操作SQLServer数据库
本人只需在项目中引入sqljdbc4.jar 包即可 ----------------------------------------- 在JAVA中如何连接SQL Server数据库 - hangh ...
- 远程连接云主机MySql数据库
笔者最近在学习MySql数据库,试着远程连接阿里云主机数据库.在连接过程中遇到不少麻烦,这里总结一下过程中遇到的问题. 基本前提 先在本地电脑和远程主机上安装MySql数据库,保证数据库服务启动. 云 ...
- 寝室远程连接室友mysql数据库
注意,本方法是适用于同一局域网下的远程连接 注意,本方法是适用于同一局域网下的远程连接 注意,本方法是适用于同一局域网下的远程连接 首先需要修改mysql数据库的相关配置,将user表中的host改为 ...
- robot_framewok自动化测试--(9)连接并操作 MySql 数据库
连接并操作 MySql 数据库 1.mysql数据库 1.1安装mysql数据库 请参考我的另一篇文章:MYSQL5.7下载安装图文教程 1.2.准备测试数据 请参考我的另一篇文章:Mysql基础教程 ...
- python连接,操作 InfluxDB
准备工作 启动服务器 执行如下命令: service influxdb start 示例如下: [root@localhost ~]# service influxdb start Starting ...
- python 在window 系统 连接并操作远程 oracle 数据库
1,python 连接 oracle 需要 oracle 自身的客户端 instantclient,可以去官网下载自己需要的版本, https://www.oracle.com/technetwor ...
- python接口自动化测试框架实现之操作oracle数据库
python操作oracle数据库需要使用到cx-oracle库. 安装:pip install cx-oracle python连接oracle数据库分以下步骤: 1.与oracle建立连接: 2. ...
随机推荐
- 【RL-TCPnet网络教程】第15章 RL-TCPnet之创建多个TCP连接
第15章 RL-TCPnet之创建多个TCP连接 本章节为大家讲解RL-TCPnet的TCP多客户端实现,因为多客户端在实际项目中用到的地方还挺多,所以我们也专门开启一个章节做讲解.另外,学习 ...
- [Swift]LeetCode738. 单调递增的数字 | Monotone Increasing Digits
Given a non-negative integer N, find the largest number that is less than or equal to Nwith monotone ...
- [Swift]LeetCode978. 最长湍流子数组 | Longest Turbulent Subarray
A subarray A[i], A[i+1], ..., A[j] of A is said to be turbulent if and only if: For i <= k < j ...
- 【烂笔头】adb命令篇
1.一个自动安装SystemUI.apk的脚本文件push-SystemUI.bat: adb rootadb remountadb push ./SystemUI.apk system/priv-a ...
- HUSTOJ:Transit Tree Path
问题 D: Transit Tree Path You are given a tree with N vertices.Here, a tree is a kind of graph, and ...
- What can university bring to you?
前言 大学真的是一个神奇的地方,它能带给你的东西超乎你的想象. 当我刚进大学的时候,觉得它和初中,高中,没什么不同,就只是换了地方而已,但是当我现在从里面出来之后,才真的发现,我已经真的不是当年那个自 ...
- [软件开发技巧]·树莓派极简安装OpenCv
树莓派极简安装OpenCv 个人主页–> https://xiaosongshine.github.io/ 因为最近在开发使用树莓派+usb摄像头识别模块,打算用OpenCv,发现网上的树莓派O ...
- 【ASP.NET Core快速入门】(十六)MVC开发:DbContextSeed初始化
前言 由于我们现在每次EF实体模型变化的时候每次都是手动更改,我们想通过代码的方式让他自动更新,或者程序启动的时候添加一些数据进去 DbContextSeed初始化 首先,在Data文件夹下添加一个A ...
- PE知识复习之PE的重定位表
PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思. 如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234. 如果Im ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本“产品管理”事例编辑界面新增KindEditor复文本编辑控件
KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE.Firefox.Chrome.Safari.Opera等主流浏览器.KindEditor使 ...