使用 Python 查询数据
使用 InfluxDB 的 Python 客户端库模块 `influxdb_client_3` 和 SQL 或 InfluxQL 查询存储在 InfluxDB 中的数据。通过 Flight+gRPC 协议执行查询并检索数据,然后使用常见的 Python 工具处理数据。
开始使用 Python 查询 InfluxDB
本指南假设以下先决条件
有关如何设置 InfluxDB 和写入数据的说明,请参阅入门教程中的 设置说明。
创建 Python 虚拟环境
本指南遵循使用 Python 虚拟环境 的推荐做法。如果您不想使用虚拟环境并且已安装 Python,请继续阅读 查询 InfluxDB。Python 虚拟环境 将项目的 Python 解释器和依赖项保持自包含和隔离,使其与其他项目分开。
要安装 Python 和创建虚拟环境,请选择以下选项之一
Python venv:自 Python 3.5 版本以来,
venv模块 是 Python 的标准部分。Anaconda® 发行版:这是一个提供 Python 和 conda 包和环境管理器的 Python/R 数据科学发行版。
安装 Python
按照 Python 安装说明 安装适合您系统的 Python 编程语言最新版本。
检查您是否可以运行
python和pip命令。pip是包含在大多数 Python 发行版中的包管理器。在终端中,输入以下命令
python --versionpip --version根据您的系统,您可能需要使用特定版本的命令——例如。
python3 --versionpip3 --version如果 neither
pipnorpip<PYTHON_VERSION>都不工作,请遵循 Pypa.io Pip 安装 方法之一。
创建项目虚拟环境
为您的 Python 项目创建一个目录并将工作目录更改为新目录——例如
mkdir ./PROJECT_DIRECTORY && cd $_使用 Python 的
venv模块创建虚拟环境——例如python -m venv envs/virtualenv-1venv在您的项目中创建新的虚拟环境目录。要激活终端中的新虚拟环境,请运行
source命令并传递虚拟环境activate脚本的路径source envs/VIRTUAL_ENVIRONMENT_NAME/bin/activate例如
source envs/virtualenv-1/bin/activate
安装 Anaconda
遵循您系统的 Anaconda 安装说明。
检查您是否可以运行
conda命令conda使用
conda创建虚拟环境——例如conda create --prefix envs/virtualenv-1conda在名为./envs/virtualenv-1的目录中创建虚拟环境。要激活新的虚拟环境,请使用
conda activate命令并传递虚拟环境的目录路径conda activate envs/VIRTUAL_ENVIRONMENT_NAME例如
conda activate ./envs/virtualenv-1
当激活虚拟环境时,名称会显示在终端命令行的开头——例如
(virtualenv-1) $ PROJECT_DIRECTORY
查询 InfluxDB
安装 influxdb3-python 库
influxdb3-python 包提供了 influxdb_client_3 模块,用于将 InfluxDB 集群与您的 Python 代码集成。该模块支持将数据写入 InfluxDB 以及使用 SQL 或 InfluxQL 查询数据。
安装以下依赖项
已在 写入数据部分 中安装
influxdb3-python*:提供influxdb_client_3模块,并安装用于处理查询返回的 Arrow 数据的pyarrow包。pandas:提供用于分析和操作数据的 pandas 模块。tabulate:提供用于格式化表格数据的tabulate函数。
在您的终端中输入以下命令
pip install influxdb3-python pandas tabulate
安装了 influxdb3-python 和 pyarrow 后,您就可以查询和分析存储在 InfluxDB 数据库中的数据了。
创建 InfluxDB 客户端
以下示例展示了如何使用 Python 和 influxdb_client_3 模块实例化配置为 InfluxDB 集群数据库的客户端。
在您的编辑器中,将以下示例代码复制并粘贴到一个新文件中——例如,query-example.py
# query-example.py
from influxdb_client_3 import InfluxDBClient3
# Instantiate an InfluxDBClient3 client configured for your database
client = InfluxDBClient3(
host='cluster-host.com',
token='DATABASE_TOKEN',
database='DATABASE_NAME'
)
替换以下配置值
数据库:要查询的InfluxDB 集群数据库的名称令牌:具有对指定数据库读取访问权限的数据库令牌。请将其存储在秘密存储或环境变量中,以避免暴露原始令牌字符串。
执行查询
要执行查询,请调用以下客户端方法
并指定以下参数
- query:一个字符串。要执行的 SQL 或 InfluxQL 查询。
- language:一个字符串(
"sql"或"influxql")。查询语言。
示例
以下示例展示了如何使用 SQL 或 InfluxQL 查询测量中的所有字段,并将结果格式化为 Markdown 表格。
# query-example.py
from influxdb_client_3 import InfluxDBClient3
client = InfluxDBClient3(
host='cluster-host.com',
token='DATABASE_TOKEN',
database='DATABASE_NAME'
)
# Execute the query and return an Arrow table
table = client.query(
query="SELECT * FROM home",
language="influxql"
)
print("\n#### View Schema information\n")
print(table.schema)
print(table.schema.names)
print(table.schema.types)
print(table.field('room').type)
print(table.schema.field('time').metadata)
print("\n#### View column types (timestamp, tag, and field) and data types\n")
print(table.schema.field('time').metadata[b'iox::column::type'])
print(table.schema.field('room').metadata[b'iox::column::type'])
print(table.schema.field('temp').metadata[b'iox::column::type'])
print("\n#### Use PyArrow to read the specified columns\n")
print(table.column('temp'))
print(table.select(['room', 'temp']))
print(table.select(['time', 'room', 'temp']))
print("\n#### Use PyArrow compute functions to aggregate data\n")
print(table.group_by('hum').aggregate([]))
print(table.group_by('room').aggregate([('temp', 'mean')]))
替换以下配置值
数据库:要查询的InfluxDB 集群数据库的名称令牌:具有对指定数据库读取访问权限的数据库令牌。请将其存储在秘密存储或环境变量中,以避免暴露原始令牌字符串。
接下来,了解如何使用 Python 工具处理时间序列数据
这个页面有帮助吗?
感谢您的反馈!