文档

使用 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

    1. 按照 Python 安装说明 安装适合您系统的 Python 编程语言最新版本。

    2. 检查您是否可以运行 pythonpip 命令。 pip 是包含在大多数 Python 发行版中的包管理器。

      在终端中,输入以下命令

      python --version
      
      pip --version
      

      根据您的系统,您可能需要使用特定版本的命令——例如。

      python3 --version
      
      pip3 --version
      

      如果 neither pip nor pip<PYTHON_VERSION> 都不工作,请遵循 Pypa.io Pip 安装 方法之一。

    创建项目虚拟环境

    1. 为您的 Python 项目创建一个目录并将工作目录更改为新目录——例如

      mkdir ./PROJECT_DIRECTORY && cd $_
      
    2. 使用 Python 的 venv 模块创建虚拟环境——例如

      python -m venv envs/virtualenv-1
      

      venv 在您的项目中创建新的虚拟环境目录。

    3. 要激活终端中的新虚拟环境,请运行 source 命令并传递虚拟环境 activate 脚本的路径

      source envs/VIRTUAL_ENVIRONMENT_NAME/bin/activate
      

      例如

      source envs/virtualenv-1/bin/activate
      

    安装 Anaconda

    1. 遵循您系统的 Anaconda 安装说明

    2. 检查您是否可以运行 conda 命令

      conda
      
    3. 使用 conda 创建虚拟环境——例如

      conda create --prefix envs/virtualenv-1 
      

      conda 在名为 ./envs/virtualenv-1 的目录中创建虚拟环境。

    4. 要激活新的虚拟环境,请使用 conda activate 命令并传递虚拟环境的目录路径

      conda activate envs/VIRTUAL_ENVIRONMENT_NAME
      

      例如

      conda activate ./envs/virtualenv-1
      

当激活虚拟环境时,名称会显示在终端命令行的开头——例如

(virtualenv-1) $ PROJECT_DIRECTORY

查询 InfluxDB

  1. 安装 influxdb3-python 库
  2. 创建 InfluxDB 客户端
  3. 执行查询

安装 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-pythonpyarrow 后,您就可以查询和分析存储在 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
'
)

重要:如果您使用 Windows,请指定 Windows 证书路径

替换以下配置值

  • 数据库:要查询的InfluxDB 集群数据库的名称
  • 令牌:具有对指定数据库读取访问权限的数据库令牌请将其存储在秘密存储或环境变量中,以避免暴露原始令牌字符串。

执行查询

要执行查询,请调用以下客户端方法

query(query,language)方法

并指定以下参数

  • 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="sql" ) 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')]))
# 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 工具处理时间序列数据


这个页面有帮助吗?

感谢您的反馈!


Flux 的未来

Flux 正在进入维护模式。您可以继续像现在一样使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB v3 增强功能和 InfluxDB Clustered 现已上市

新功能包括更快的查询性能和管理工具,InfluxDB v3 产品线得到了显著增强。InfluxDB Clustered 现已上市。

InfluxDB v3 性能和功能

InfluxDB v3 产品线在查询性能方面取得了重大进步,并提供了新的管理工具。这些增强包括一个操作仪表板来监控您的 InfluxDB 集群的健康状况,InfluxDB Cloud Dedicated 中的单点登录(SSO)支持以及针对令牌和数据库的新管理 API。

了解新的 v3 增强功能


InfluxDB Clustered 上市

InfluxDB Clustered 现已上市,并为您在自行管理的堆栈中提供了 InfluxDB v3 的功能。

与我们讨论 InfluxDB Clustered