在 Apache Superset 中以编程方式设置源数据库

Programmatically set source database in Apache Superset

我是 运行 AWS-ECS 上的 Apache Superset,以促进直接与我们的 RDS 的连接。此连接有效,但必须手动配置。

有没有办法使用 Apache Superset 以编程方式配置源数据库?

我试过设置 SQLALCHEMY_DATABASE_URI,但那只适用于 Superset 后端配置和设置。

Superset 有一个 API,因此您可以 create/update/delete 通过 HTTP 请求访问数据库。授权是 non-trivial,因为您需要先登录才能获取 CSRF 令牌并存储 cookie:

import requests
from bs4 import BeautifulSoup
from yarl import URL

superset_url = URL('https://superset.example.org/')

session = requests.Session()

# get CSRF token
response = session.get(superset_url / "login/")
soup = BeautifulSoup(response.text, "html.parser")
csrf_token = soup.find("input", {"id": "csrf_token"})["value"]

# get cookies
session.post(
    superset_url / "login/",
    data=dict(username=username, password=password, csrf_token=csrf_token),
)

# create database
database = {
    "database_name": "my db",
    "sqlalchemy_uri": "gsheets://",
    ...
}
session.post(
    superset_url / "api/v1/database/",
    json=database,
    headers={"X-CSRFToken": csrf_token},
)