Gel(edgedb)Python 客户端连接数据库实战:create_async_client 与 EdgeQL 查询入门

发布时间:2026/9/22 19:31:25

Gel(edgedb)Python 客户端连接数据库实战:create_async_client 与 EdgeQL 查询入门 数据库图数据库关系型数据库【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址https://gitcode.com/gh_mirrors/ed/edgedb点击查看免费下载本篇技术指南以 Gel 快速上手Quickstart系列中Connecting to the database一节对应仓库 docs/intro/quickstart/connecting/fastapi.rst为核心讲解如何在 FastAPI 应用中通过gelPython 客户端库连接本地 Gel 实例、执行 EdgeQL 字符串查询、插入与回读Deck数据并完成清理。读完本文你将掌握create_async_client()的零配置连接原理、query/query_single等核心 API 的语义差异以及本地开发与生产部署两种场景下的连接解析机制。前置环境确保你已完成项目初始化本文的所有示例都假设你已经按照 FastAPI 快速上手的 setup 章节 完成了环境准备克隆quickstart-fastapi模板、创建虚拟环境、安装依赖并执行了uvx gel project init。这一步会在项目根目录生成一个与本机 Gel 实例绑定的项目链接同时创建gel.toml与dbschema/目录并在 建模章节 中定义Deck与Card类型。第一步初始化客户端并执行第一条静态查询在深入编写应用逻辑之前先用一个最简脚本验证数据库连接。新建./test.pyimport gel import asyncio async def main(): client gel.create_async_client() result await client.query_single(select Hello from Gel!;) print(result) asyncio.run(main())运行$ python test.py Hello from Gel!为什么不用传任何连接参数请注意create_async_client函数并没有接收任何连接详情。这正是 Gel Python 客户端与其他数据库驱动在体验上的关键差异你不需要自己设计一套拼连接串、管理凭据的方案也无需担心把凭据泄露进代码。连接信息的解析由客户端库统一完成本地开发只要在项目目录内运行过gel project init客户端会自动检测到项目链接连接到该项目绑定的本地 Gel 实例部署环境为进程设置约定的环境变量详见下文客户端同样能自动识别。关于这一连接解析协议docs/intro/clients.rst 有完整说明所有官方客户端库Python、TypeScript、Rust、Go、.NET 等都实现了同一套标准协议用于决定如何连接数据库gel.Client在内部还会维护一个连接池并通过 Gel 高效的二进制协议执行查询。第二步通过 EdgeQL 字符串完成增、查、删在 Python 中我们直接把 EdgeQL 查询写成字符串。这样既能获得 EdgeQL 完整的表达力又可以通过 Gel 严格strict的 schema 保持类型安全——schema 由dbschema/中的类型定义与迁移文件migrations保证查询返回的对象结构与类型由服务端校验。将test.py扩展为先插入两副Deck牌组再把它们全部查询出来并打印id与name最后清空Deck表import gel import asyncio async def main(): client gel.create_async_client() await client.query( insert Deck { name : I am one } ) await client.query( insert Deck { name : I am two } ) decks await client.query( select Deck { id, name } ) for deck in decks: print(fID: {deck.id}, Name: {deck.name}) await client.query(delete Deck) asyncio.run(main())运行结果$ python test.py Hello from Gel! ID: f4cd3e6c-ea75-11ef-83ec-037350ea8a6e, Name: I am one ID: f4cf27ae-ea75-11ef-83ec-3f7b2fceab24, Name: I am two这段代码用到的 API 语义Deck类型正是在 建模章节 中通过 SDL 定义并迁移进数据库的required name: str、multi cards: Card等。上面的代码暴露了 Python 客户端的三个关键方法它们在 Python 客户端参考 中有精确的语义定义方法返回值语义越界行为query始终返回结果列表list对基数cardinality不做任何约束无query_single期望零或一个元素的单例结果T \| None返回多于一个元素时抛出ResultCardinalityMismatchErrorquery_required_single期望恰好一个元素返回空集或多于一个元素时抛出运行时错误例如在第一步中select Hello from Gel!;恒返回一个元素因此适合用query_single直接拿到字符串而在本例中select Deck {...}可能返回任意多行所以用query拿到对象列表再遍历。注意数组和元组被视为结果集中的一个元素所以query_single(select [1, 2, 3];)返回的是list[int64] | None而非报错。此外query系列方法支持$参数注入命名参数以关键字方式传入如await client.query(select 2 $addend;, addend2)位置参数以位置方式传入但同一查询中不能混用两种方式参数仅支持标量或标量数组。连接解析机制深挖projects 与环境变量create_async_client之所以零配置是因为客户端内部按固定优先级解析连接信息docs/intro/clients.rst 的 Connection 一节完整列出了这一协议本地开发项目链接projects在代码库根目录执行gel project init后任何使用官方客户端库的代码都会自动连接到该项目链接的实例——不需要环境变量也不需要硬编码凭据。项目配置本身记录在gel.toml中模板中该文件还带有hooks.schema.update.after uvx gel-py之类的钩子用于在 schema 变更后自动重新生成类型安全的查询代码。生产部署环境变量在非项目目录或生产环境中通过环境变量向客户端传递连接信息Gel Cloud 实例推荐设置GEL_INSTANCE取值为org-name/instance-name与GEL_SECRET_KEY密钥可在 Cloud UI 中创建也可通过gel cloud secretkey create命令生成。自托管远程实例最常用的是GEL_DSN即连接字符串形如username:passwordhostname:port其中每个元素都可省略并拥有默认值host 默认localhost、port 默认5656、user 默认admin、password 默认空。DSN 还可带查询参数例如branch要连接的数据库分支默认main、tls_securitystrict/no_host_verification/insecure默认strict、tls_ca_file指向 CA 根证书的文件路径。拆分式环境变量也可分别设置GEL_HOST、GEL_PORT、GEL_USER、GEL_PASSWORD、GEL_BRANCH、GEL_TLS_CA_FILE、GEL_CLIENT_TLS_SECURITY但一旦设置了GEL_DSN它会覆盖这些拆分变量。其他机制GEL_CREDENTIALS_FILE指向一个包含host、port、user、password、branch、tls_cert_data等字段的 JSON 文件GEL_INSTANCE则仅对本地或 Cloud 实例有效。此外若在项目目录内定义了GEL_DSN等环境变量环境变量优先于项目链接。从源码结构看参见 docs/reference/using/python/client.rstgel.create_async_client()创建的AsyncIOClient实例内部维护一个动态大小的连接池且连接是惰性lazily初始化的——在首次执行查询之前不会真正建立连接。若想在未发起查询时主动触发连接、尽早暴露配置错误可调用await client.ensure_connected()。小结至此你已经走通了 Gel Python 的完整闭环在项目目录内用create_async_client()免配置获得客户端用 EdgeQL 字符串直接完成insert/select/delete操作并通过query与query_single精确控制返回结果的基数语义。接下来可以继续阅读 working 章节 或 Python 客户端 API 参考进一步了解gel库在 FastAPI 路由中如何复用客户端、执行事务与处理类型化结果。赞分享数据库图数据库关系型数据库【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址https://gitcode.com/gh_mirrors/ed/edgedb点击查看免费下载相关推荐猫抓Cat-Catch浏览器媒体资源嗅探的终极解决方案猫抓Cat Catch浏览器媒体资源嗅探的终极解决方案 在现代Web开发和技术应用场景中如何高效捕获和分析浏览器中的媒体资源一直是一个技术挑战。猫抓Cat数据库图数据库关系型数据库EdgeQL 快速实战指南GelEdgeDB查询语言核心语法全解EdgeQL 快速实战指南GelEdgeDB查询语言核心语法全解 EdgeQL 是 Gel本项目仓库为 edgedb 的查询语言被设计为 SQL 的数据库图数据库关系型数据库SpacetimeDB 接入 PostgreSQL Wire Protocol让 psql、Python 与 Rust 客户端直连查询数据库SpacetimeDB 接入 PostgreSQL Wire Protocol让 psql、Python 与 Rust 客户端直连查询数据库 本篇技术指南围绕数据库关系型数据库后端上一篇background-agents事件转发器与Bridge重连设计深度解析下一篇ViGEmBus让Windows游戏手柄兼容性不再是难题的虚拟驱动神器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/22 19:31:25

云开日出优化实战:3个面试必问的性能坑

云开日出优化实战:3个面试必问的性能坑 面试被问原理答不上来,这种丢人的事谁还没干过?上周陪一个朋友模拟面试,聊到高并发场景下的资源调度,他愣了半天,只憋出一句“加缓存”。面试官追问“为什么是云开日出这种状态恢复机制而不是全量重建”,他直接…

2026/9/22 19:26:25

【合并多个RIS文件为一个文件】

合并多个RIS文件为一个文件 from pathlib import PathSOURCE_DIR = Path(r"C:\Users\11\Desktop\test") OUTPUT_FILE = Path(r"C:\Users\11\Desktop\merged_ris_files.ris")def read_ris(path: Path) -

2026/9/22 20:21:30

顺丰费用计算器源码拆解:3步解决跑不通难题的最佳实践

顺丰费用计算器源码拆解:3步解决跑不通难题的最佳实践 复制来的代码跑不通不知道怎么调?别慌,这锅代码不背,是环境没搭对。 做物流成本核算的兄弟都知道,写个顺丰费用计算器看着简单,真跑起来全是坑。很多人直接从 GitHub…

2026/9/22 20:21:30

北京2015年地铁规划源码解析:5年踩坑总结

北京2015年地铁规划源码解析:5年踩坑总结 版本升级后 API 全变了,这是老架构师最头疼的事。 就像北京2015年地铁规划从模拟阶段转向实施阶段,底层数据结构大改,上层业务逻辑全崩。 今天拆解这段【源码解析】,看当年如何平滑过渡。…

2026/9/22 20:21:30

huang色网站性能优化实战:版本升级后API全变了,这3招救急

huang色网站性能优化实战:版本升级后API全变了,这3招救急 版本升级后 API 全变了,接口报错频发,系统响应慢如蜗牛。这种“代码还没写完,文档已经过期”的困境,是后端开发最头疼的时刻。性能优化不再是锦上添花,而是生死攸关的底线。…

2026/9/22 20:21:30

龙门飞甲高清完整版实战:3步搞定API变更与性能优化

龙门飞甲高清完整版实战:3步搞定API变更与性能优化 版本升级后 API 全变了,你是不是也抓狂? 别急,这不仅是代码问题,更是 性能优化 的契机。 今天拆解【龙门飞甲高清完整版】核心源码,带你从入口到原理。 入口定位:找到核心调用链…

2026/9/22 20:16:29

3个弗洛伊德心理学面试必问坑,源码级拆解帮你过关

3个弗洛伊德心理学面试必问坑,源码级拆解帮你过关 面试被问弗洛伊德心理学原理答不上来,直接凉凉。这不仅是心理学考生的噩梦,更是很多跨专业求职者(如产品经理、用户研究员、甚至后端开发)在行为面试题或特定岗位考察中的高频失分点。很多【面试必问】…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/22 0:04:49

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点 官方文档几百页翻到头还是懵?面试问到 输电线路在线监测 的数据链路时,脑子一片空白?别慌,这种 高频面试题 我整理了10年,专门治各种“文档太长抓不住重点”的毛病。…

2026/9/22 0:04:49

中介房源管理系统重构避坑:3个关键步骤搞定API变更

中介房源管理系统重构避坑:3个关键步骤搞定API变更 版本升级后 API 全变了,这种痛只有真做过的人懂。 很多团队在接手老旧房产项目时,最崩溃的不是代码烂,而是底层框架升级后,原本熟悉的接口调用方式彻底失效。 这份 保姆级教程…

2026/9/22 0:04:49

3个坑点带你一文搞懂55gg小游戏源码

3个坑点带你一文搞懂55gg小游戏源码 盯着控制台满屏的红色报错,看着那一长串 StackTrace ,是不是脑子瞬间宕机?别急,这种时候最忌讳的就是盲目改代码。很多刚入行的前端同学,面对 55gg 小游戏这类轻量级 H5…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码