使用 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 --version
pip --version
根据您的系统,您可能需要使用特定版本的命令——例如。
python3 --version
pip3 --version
如果 neither
pip
norpip<PYTHON_VERSION>
都不工作,请遵循 Pypa.io Pip 安装 方法之一。
创建项目虚拟环境
为您的 Python 项目创建一个目录并将工作目录更改为新目录——例如
mkdir ./PROJECT_DIRECTORY && cd $_
使用 Python 的
venv
模块创建虚拟环境——例如python -m venv envs/virtualenv-1
venv
在您的项目中创建新的虚拟环境目录。要激活终端中的新虚拟环境,请运行
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-1
conda
在名为./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 工具处理时间序列数据
这个页面有帮助吗?
感谢您的反馈!