”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 超级数据库Python

超级数据库Python

发布于2024-10-31
浏览:891

Supabase Python

随着 Supabase 社区的发展,对各种客户端库和框架特定 SDK 的需求也在不断增长。这种需求大部分是由开源社区本身提供的,该社区目前维护着数十个库。

⚡️ 有关发布周的更多信息

当人们向托管的 Supabase 服务提出请求时,我们能够很好地了解其中一些库的使用范围,并且当特定库获得广泛采用时,我们为它添加官方支持是有意义的它。从社区支持到官方支持的飞跃的库的例子包括supabase-flutter和supabase-swift。

在过去的一年半里,Python 客户端库一直得到了令人难以置信的社区支持,但我们看到了采用率的大幅增长。这是由 AI 和 ML 社区中 Supabase 的广泛采用推动的,其中许多人都是热衷于 Python 的人。

今天,我们宣布 Supabase 平台现已正式支持以下 Python 客户端库:

  • supabase-py
  • auth-py
  • 存储-py
  • 函数-py
  • 实时py

supabase-py 最初由维护者 lqmanh 于 2020 年 9 月启动,不久后 Fedden 和 J0(后来成为 Supabase 团队的全职成员)加入。近年来,silentworks 和 juancarlospaco 推动了开发,他们都在推动实现与 supabase-js 同等功能方面发挥了重要作用。

非常感谢迄今为止为客户端库做出贡献的每个人,希望我们将来能看到更多社区库推动官方支持。

下面是 Python 库集合中添加的一些最新功能的概述。

默认启用 HTTP2

Supabase 客户端默认情况下会自动使用 HTTP 2.0,为您现有的应用程序提供无缝的性能提升。

此改进以完全透明的方式实现,无需更改现有代码,同时可能显着减少延迟并增强性能。

参见:

  • https://github.com/supabase/functions-py/pull/115
  • https://github.com/supabase/auth-py/pull/534
  • https://github.com/supabase/postgrest-py/pull/462
  • https://github.com/supabase/storage-py/pull/271

默认遵循重定向

Supabase 客户端现在默认自动遵循所有 HTTP 重定向,与其他编程语言中 Supabase 客户端的行为保持一致。

此增强功能提高了整个生态系统的一致性,并简化了重定向的处理,减少了在 URL 更改或负载平衡等常见场景中手动干预的需要。

参见:

  • https://github.com/supabase/postgrest-py/pull/449
  • https://github.com/supabase/functions-py/pull/107
  • https://github.com/supabase/storage-py/pull/257
  • https://github.com/supabase/auth-py/pull/511

默认启用保持活动状态

Supabase 客户端现在默认自动包含一个有时会丢失的保持活动 HTTP 标头,解决了以前版本中的这种不一致问题。

此增强功能优化了连接管理,可能会减少延迟,并通过维护与服务器的持久连接来提高性能,特别有利于进行非常频繁的 API 调用的应用程序。

边缘函数区域

添加了对指定边缘函数将运行的区域的支持(区域基本上是世界上的物理位置)。

参见:

  • https://github.com/supabase/functions-py/pull/126

实时V2

Realtime 已升级到 2.0 版本,进行了大量改进和修复,包括更新的示例和新的与状态相关的功能(广播、订阅、跟踪等)。

参见:

  • https://github.com/supabase/realtime-py/pull/139
  • https://github.com/supabase/realtime-py/pull/178

身份验证改进

匿名登录已添加到 Auth 客户端,包括已添加到 User 类的新 is_anonymous 布尔属性,sign_in_with_id_token() 和 sign_in_with_sso() 方法也已添加到 Auth 客户端,等等错误修复。

参见:

  • https://github.com/supabase/auth-py/pull/528
  • https://github.com/supabase/auth-py/pull/548
  • https://github.com/supabase/auth-py/pull/553
  • https://github.com/supabase/auth-py/pull/506

Postgrest 在查询中引用/转义

Supabase 通过在客户端的内部 SQL 查询中实现 sanitize_param() 参数清理来提高 PostgreSQL 查询安全性,确保所有操作中的数据处理和查询执行更安全。

使用未经验证的 SSL 运行

无论出于何种原因,某些用户需要使用无效或未经验证的 SSL 来运行 Supabase 客户端(开发环境中的 SSL 调试器/跟踪器/分析器/等),一个新的可选布尔参数被添加到客户端的构造函数中,然后传递验证=False 使其能够使用未经验证的 SSL 运行而不会发出警告。

from postgrest import SyncPostgrestClient

url: str = "https://example.com"
h: dict = {"Custom-Header": "value"}

with SyncPostgrestClient(url, schema="pub", headers=h, verify = False) as client:
    session = client.session
    assert session.base_url == "https://example.com"

参见:

  • https://github.com/supabase/functions-py/pull/106
  • https://github.com/supabase/storage-py/pull/256
  • https://github.com/supabase/auth-py/pull/506
  • https://github.com/supabase/postgrest-py/pull/448
  • https://github.com/supabase/supabase-py/pull/813

实时关闭套接字

Supabase Realtime 库现在包含一个新的 close() 方法,用于关闭套接字连接。

此添加功能为开发人员提供了对连接生命周期的更好控制,允许在需要时显式关闭套接字连接。

import os
from realtime import AsyncRealtimeClient

def callback1(payload):
    print("Callback 1: ", payload)

SUPABASE_ID: str = os.environ.get("SUPABASE_ID")
API_KEY: str = os.environ.get("SUPABASE_KEY")

URL: str = f"wss://{SUPABASE_ID}.supabase.co/realtime/v1/websocket"

client = AsyncRealtimeClient(URL, API_KEY)
await client.connect()

channel_1 = s.channel("realtime:public:sample")
channel_1.subscribe().on_postgres_changes("INSERT", callback1)

await client.listen()
await client.close()

参见:

  • https://github.com/supabase-community/realtime-py/pull/142

边缘函数超时

边缘函数的超时现已修复,长时间运行的函数可以正确完成,不再有库客户端内部超时切断函数。

用户现在可以自信地在 Edge Functions 中实现更复杂的操作。

import os
from supabase import create_client
from supabase.lib.client_options import ClientOptions

url: str = os.environ.get("SUPABASE_URL")
key: str = os.environ.get("SUPABASE_KEY")

options = ClientOptions(function_client_timeout = 15)
client = create_client(url, key, options)

client.functions.url = "http://127.0.0.1:54321/functions/v1/hello-world"
print(client.functions.invoke("hello"))

参见:

  • https://github.com/supabase/functions-py/pull/120
  • https://github.com/supabase/supabase-py/pull/846

用于将数据迁移到 Supabase 的新工具 Vec2pg

创建了一个新的简单且可扩展的 CLI 工具,用于将矢量数据从其他服务和 SASS 迁移到 Supabase,它可以通过单个命令将矢量数据从 Pinecone 和 Qdrant 迁移到 Supabase,从而简化工作流程并增强跨 AI 和 ML 的数据可移植性项目。

您可以投票支持未来添加的其他矢量数据库提供商!

参见:

  • https://github.com/supabase-community/vec2pg
  • https://github.com/supabase-community/vec2pg/pull/5
  • https://github.com/supabase-community/vec2pg/issues/6

更新了 CI

所有库的持续集成构建都已升级并变得更加严格(linter 等)。

参见:

  • https://github.com/supabase/supabase-py/pull/772
  • https://github.com/supabase/supabase-py/pull/774
  • https://github.com/supabase/functions-py/pull/93
  • https://github.com/supabase/functions-py/pull/92
  • https://github.com/supabase/storage-py/pull/240
  • https://github.com/supabase/storage-py/pull/237
  • https://github.com/supabase/realtime-py/pull/132
  • https://github.com/supabase/realtime-py/pull/131
  • https://github.com/supabase/postgrest-py/pull/424
  • https://github.com/supabase/postgrest-py/pull/422
  • https://github.com/supabase/functions-py/pull/139
  • https://github.com/supabase/storage-py/pull/287
  • https://github.com/supabase/auth-py/pull/572
  • https://github.com/supabase/postgrest-py/pull/484
  • https://github.com/supabase/supabase-py/pull/887
  • https://github.com/supabase/realtime-py/pull/182

各种各样的

  • 所有代码存储库的单元测试覆盖率均得到改善。
  • 循环复杂度已在所有库(mccabe、prospector)中进行了分析和改进。
  • 代码风格、符号命名、文档、注释和文档字符串的多项修复。

贡献

如果您想参与为我们的 Python 客户端库做出贡献,请参阅此处了解有关如何做出贡献的一些信息,并查看未决问题列表以获取有关工作内容的一些灵感。

入门

Supabase 文档站点上提供了 Supabase Python 客户端库的完整文档。

版本声明 本文转载于:https://dev.to/supabase/supabase-python-50j?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • FastAPI自定义404页面创建指南
    FastAPI自定义404页面创建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    编程 发布于2025-07-07
  • 如何避免Go语言切片时的内存泄漏?
    如何避免Go语言切片时的内存泄漏?
    ,a [j:] ...虽然通常有效,但如果使用指针,可能会导致内存泄漏。这是因为原始的备份阵列保持完整,这意味着新切片外部指针引用的任何对象仍然可能占据内存。 copy(a [i:] 对于k,n:= len(a)-j i,len(a); k
    编程 发布于2025-07-07
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-07-07
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-07-07
  • PHP SimpleXML解析带命名空间冒号的XML方法
    PHP SimpleXML解析带命名空间冒号的XML方法
    在php 很少,请使用该限制很大,很少有很高。例如:这种技术可确保可以通过遍历XML树和使用儿童()方法()方法的XML树和切换名称空间来访问名称空间内的元素。
    编程 发布于2025-07-07
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-07-07
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-07-07
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-07-07
  • C++成员函数指针正确传递方法
    C++成员函数指针正确传递方法
    如何将成员函数置于c 的函数时,接受成员函数指针的函数时,必须同时提供对象的指针,并提供指针和指针到函数。需要具有一定签名的功能指针。要通过成员函数,您需要同时提供对象指针(此)和成员函数指针。这可以通过修改Menubutton :: SetButton()(如下所示:[&& && && &&华)...
    编程 发布于2025-07-07
  • 将图片浮动到底部右侧并环绕文字的技巧
    将图片浮动到底部右侧并环绕文字的技巧
    在Web设计中围绕在Web设计中,有时可以将图像浮动到页面右下角,从而使文本围绕它缠绕。这可以在有效地展示图像的同时创建一个吸引人的视觉效果。 css位置在右下角,使用css float and clear properties: img { 浮点:对; ...
    编程 发布于2025-07-07
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-07-07
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-07-07
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-07-07
  • Python环境变量的访问与管理方法
    Python环境变量的访问与管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    编程 发布于2025-07-07
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-07-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3