Gradio 代理和 MCP 黑客马拉松

获奖者
Gradio logo
  1. 其他教程
  2. 从 Supabase 数据创建仪表盘

从 Supabase 数据创建仪表盘

Supabase 是一个基于云的开源后端,提供 PostgreSQL 数据库、身份验证以及其他用于构建 Web 和移动应用程序的实用功能。在本教程中,你将学习如何从 Supabase 读取数据并在 Gradio 仪表盘上实时绘制数据。

先决条件:首先,你需要一个免费的 Supabase 帐户,你可以在这里注册:https://app.supabase.com/

在这份端到端指南中,你将学习如何

  • 在 Supabase 中创建表格
  • 使用 Supabase Python 客户端向 Supabase 写入数据
  • 使用 Gradio 在实时仪表盘中可视化数据

如果你已经在 Supabase 上有数据并希望在仪表盘中可视化,你可以跳过前两节,直接前往可视化数据

在 Supabase 中创建表格

首先,我们需要一些数据来可视化。按照这篇优秀的指南,我们将创建虚构的商业数据并将其放入 Supabase。

1. 首先在 Supabase 中创建一个新项目。登录后,点击“New Project”(新项目)按钮。

2. 为你的项目命名并设置数据库密码。你还可以选择定价计划(对于我们的目的,免费套餐就足够了!)。

3. 在数据库启动时(可能需要长达 2 分钟),你将看到你的 API 密钥。

4. 点击左侧窗格中的“Table Editor”(表格图标)以创建新表格。我们将创建一个名为 Product 的单一表格,其 schema 如下:

product_idint8
inventory_countint8
pricefloat8
product_namevarchar

5. 点击“保存”以保存表格 schema。

我们的表格现在已经准备好了!

向 Supabase 写入数据

下一步是将数据写入 Supabase 数据集。我们将使用 Supabase Python 库来完成此操作。

6. 在终端中运行以下命令安装 supabase

pip install supabase

7. 获取你的项目 URL 和 API 密钥。点击左侧窗格上的“设置”(齿轮图标),然后点击“API”。URL 列在“项目 URL”框中,而 API 密钥列在“项目 API 密钥”中(带有 service_role, secret 标签)。

8. 现在,运行以下 Python 脚本将一些虚构数据写入表格(请注意,你必须输入第 7 步中的 SUPABASE_URLSUPABASE_SECRET_KEY 的值)。

import supabase

# Initialize the Supabase client
client = supabase.create_client('SUPABASE_URL', 'SUPABASE_SECRET_KEY')

# Define the data to write
import random

main_list = []
for i in range(10):
    value = {'product_id': i,
             'product_name': f"Item {i}",
             'inventory_count': random.randint(1, 100),
             'price': random.random()*100
            }
    main_list.append(value)

# Write the data to the table
data = client.table('Product').insert(main_list).execute()

返回你的 Supabase 仪表盘并刷新页面,你现在应该能看到 Product 表中填充了 10 行数据!

在实时 Gradio 仪表盘中可视化数据

最后,我们将使用相同的 supabase Python 库从 Supabase 数据集中读取数据,并使用 gradio 创建一个实时仪表盘。

注意:为了方便那些没有阅读前面章节的用户,本节会重复某些步骤(例如创建 Supabase 客户端)。如第 7 步所述,你需要数据库的项目 URL 和 API 密钥。

9. 编写一个函数,从 Product 表中加载数据并将其作为 pandas Dataframe 返回。

import supabase
import pandas as pd

client = supabase.create_client('SUPABASE_URL', 'SUPABASE_SECRET_KEY')

def read_data():
    response = client.table('Product').select("*").execute()
    df = pd.DataFrame(response.data)
    return df

10. 创建一个小型 Gradio 仪表盘,其中包含 2 个条形图,每分钟绘制所有项目的价格和库存并实时更新。

import gradio as gr

with gr.Blocks() as dashboard:
    with gr.Row():
        gr.BarPlot(read_data, x="product_id", y="price", title="Prices", every=gr.Timer(60))
        gr.BarPlot(read_data, x="product_id", y="inventory_count", title="Inventory", every=gr.Timer(60))

dashboard.queue().launch()

请注意,通过将函数传递给 gr.BarPlot(),条形图会在 Web 应用程序加载后立即查询数据库(然后由于 every 参数,每 60 秒再次查询)。你的最终仪表盘应该如下所示:

总结

就是这样!在本教程中,你学习了如何将数据写入 Supabase 数据集,然后读取这些数据并将结果绘制成条形图。如果你更新 Supabase 数据库中的数据,你会注意到 Gradio 仪表盘会在一分钟内更新。

尝试为此示例(或使用不同的数据集)添加更多绘图和可视化效果,以构建更复杂的仪表盘!