跳转到主要内容

Flight SQL的DB API 2和SQLAlchemy适配器

项目描述

:warning: 此库为实验性。由于 influxdb3-python 模块是 推荐的Python API,因此进一步的开发可能不完整。

此处提供的API可能更改,功能可能无法维护。自行承担风险。

概述

此库提供DB API 2接口和SQLAlchemy方言,用于Flight SQL,例如与我们的云产品中的InfluxDB IOx交互。

最初,此库旨在简化连接到Apache Superset中的Flight SQL API的过程。

flightsql-dbapi提供的SQLAlchemy主要方言针对的是DataFusion SQL执行引擎。然而,还有扩展点可以创建自定义方言,使用Flight SQL作为传输层和元数据发现。

安装

$ pip install flightsql-dbapi

用法

DB API 2 接口 (PEP-249)

from flightsql import connect, FlightSQLClient

client = FlightSQLClient(host='upstream.server.dev')
conn = connect(client)
cursor = conn.cursor()
cursor.execute('select * from runs limit 10')
print("columns:", cursor.description)
print("rows:", [r for r in cursor])

SQLAlchemy

import flightsql.sqlalchemy
from sqlalchemy import func, select
from sqlalchemy.engine import create_engine
from sqlalchemy.schema import MetaData, Table

engine = create_engine("datafusion+flightsql://john:appleseeds@upstream.server.dev:443")
runs = Table("runs", MetaData(bind=engine), autoload=True)
count = select([func.count("*")], from_obj=runs).scalar()
print("runs count:", count)
print("columns:", [(r.name, r.type) for r in runs.columns])

# Reflection
metadata = MetaData(schema="iox")
metadata.reflect(bind=engine)
print("tables:", [table for table in metadata.sorted_tables])

自定义方言

如果您的数据库无法直接使用此库提供的方言,您可以将 flightsql.sqlalchemy.FlightSQLDialect 扩展为自定义方言的起始点。

from flightsql.sqlalchemy import FlightSQLDialect
from sqlalchemy.dialects import registry

class CustomDialect(FlightSQLDialect):
    name = "custom"
    paramstyle = 'named'

    # For more information about what's available to override, visit:
    # https://docs.sqlalchemy.org.cn/en/14/core/internals.html#sqlalchemy.engine.default.DefaultDialect

registry.register("custom.flightsql", "path.to.your.module", "CustomDialect")

FlightSQLDialect 提供了 DB API 2 连接的创建。

核心反射 API(如 get_columnsget_table_namesget_schema_names)是通过 Flight SQL API 调用来实现的,因此除非您有非常具体的需求,否则您不需要覆盖这些方法。

直接使用 flightsql.FlightSQLClient

from flightsql import FlightSQLClient


client = FlightSQLClient(host='upstream.server.dev',
                         port=443,
                         token='rosebud-motel-bearer-token')
info = client.execute("select * from runs limit 10")
reader = client.do_get(info.endpoints[0].ticket)

data_frame = reader.read_all().to_pandas()

身份验证

支持 基本身份验证和 Bearer 身份验证

要使用基本身份验证进行身份验证,请提供如下 DSN

datafusion+flightsql://user:password@host:443

将与上游服务器进行握手以获取 Bearer 令牌。该令牌将用于剩余的引擎生命周期。

要直接使用 Bearer 身份验证进行身份验证,请提供 token 查询参数

datafusion+flightsql://host:443?token=TOKEN

令牌将被放置在适当的 Authentication: Bearer ... HTTP 头中。

其他查询参数

名称 描述 默认值
insecure 不使用 SSL/TLS 连接(h2c) false
disable_server_verification 禁用上游服务器的证书验证 false
token 代替基本身份验证使用的 Bearer 令牌 empty

未在上表中指定的任何查询参数都将作为 gRPC 元数据发送到上游服务器。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

flightsql_dbapi-0.2.2.tar.gz (67.1 kB 查看哈希)

上传时间

构建分发

flightsql_dbapi-0.2.2-py3-none-any.whl (23.3 kB 查看哈希)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面