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

超级数据库Python

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

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]删除
最新教程 更多>
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-07-13
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-07-13
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-07-13
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-07-13
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-07-13
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-07-13
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-07-13
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-07-13
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-07-13
  • 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-13
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-07-13
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-07-13
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-07-13
  • 如何在GO编译器中自定义编译优化?
    如何在GO编译器中自定义编译优化?
    在GO编译器中自定义编译优化 GO中的默认编译过程遵循特定的优化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    编程 发布于2025-07-13
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-07-13

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

Copyright© 2022 湘ICP备2022001581号-3