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

简介: 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

 

目录
相关文章
|
21天前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
120 68
|
22天前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
1月前
|
存储 缓存 Shell
你知道 Python 其实自带了小型数据库吗
你知道 Python 其实自带了小型数据库吗
20 2
你知道 Python 其实自带了小型数据库吗
|
1月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
1月前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接22.bijius.com
自动化数据预处理:使用Python库(如Pandas)自动清洗、转换和准备数据,为机器学习模型提供高质量输入。 实时数据处理:集成Apache Kafka或Amazon Kinesis等流处理系统,实现实时数据更新和分析。
|
1月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
|
1月前
|
数据库连接 Linux 数据库
GBase 8s数据库连接 – Python
GBase 8s数据库连接 – Python
|
1月前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
1月前
|
SQL 关系型数据库 数据库
使用 PostgreSQL 和 Python 实现数据库操作
【10月更文挑战第2天】使用 PostgreSQL 和 Python 实现数据库操作
|
2月前
|
数据采集 关系型数据库 MySQL
如何用Python+sqlalchemy创建数据库
如何用Python+sqlalchemy创建数据库