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_columns
、get_table_names
和 get_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()
身份验证
要使用基本身份验证进行身份验证,请提供如下 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 元数据发送到上游服务器。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。