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),仅供参考

相关新闻

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

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

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

2026/9/22 19:31:32 阅读更多 →
面试官揭秘:Dokodemo配置避坑指南,5分钟吃透底层原理与实战

面试官揭秘:Dokodemo配置避坑指南,5分钟吃透底层原理与实战

面试官揭秘:Dokodemo配置避坑指南,5分钟吃透底层原理与实战 官方文档那几万字,看完脑子还是一团浆糊?别慌,这正是我当年被卡住的地方。今天这篇 避坑指南 ,我不讲虚的,直接拆解 Dokodemo 在 Clameter…

2026/9/22 19:31:31 阅读更多 →
传奇网站模板避坑指南:从入门到精通的选型实战

传奇网站模板避坑指南:从入门到精通的选型实战

传奇网站模板避坑指南:从入门到精通的选型实战 别被那些花里胡哨的“一键生成”忽悠了。你是不是刚啃完几本语法书,满脑子都是 class 、 function 和 async…

2026/9/23 19:43:06 阅读更多 →

最新新闻

信号分析与处理实验全链路:从采样到滤波器设计的MATLAB实现

信号分析与处理实验全链路:从采样到滤波器设计的MATLAB实现

简介:这份资源是南京邮电大学「信号分析与处理实验」课程的完整实验报告,面向正在修读数字信号处理、信号与系统相关课程的高校学生,以及需要借助 MATLAB 完成实验与课程设计的自学者。报告覆盖信号的产生和运算、连续时间信号的频域分析、信…

2026/9/23 23:38:58 阅读更多 →
三款智能颈椎与腰部牵引理疗仪硬件横评:仿生揉捏与气压热敷实测

三款智能颈椎与腰部牵引理疗仪硬件横评:仿生揉捏与气压热敷实测

三款智能颈椎与腰部牵引理疗仪硬件横评:仿生揉捏与气压热敷实测秋分过后气温骤降,长期坐在电脑前写代码的开发者与上了年纪的长辈,最容易遭遇颈椎僵硬、肩背酸痛与腰椎间盘劳损的集中爆发: 老爸年轻时当老师落下了颈椎病&#xff…

2026/9/23 23:38:58 阅读更多 →
南山一经深度拆解:从异兽到祭祀,读懂山海经的博物志密码

南山一经深度拆解:从异兽到祭祀,读懂山海经的博物志密码

1. 为什么我要逐字啃完南山一经《山海经》第一卷南山经里的南山一经,全文不过几百字,却藏着四十多座山、十几种异兽、一堆矿产和祭祀规矩。很多人翻《山海经》都是跳着看,专挑九尾狐、凤凰这些网红神兽,但真正想把这本书读透的人&…

2026/9/23 23:38:58 阅读更多 →
大模型并不是真正的记忆:从神经元突触重塑看权重的冷热之分

大模型并不是真正的记忆:从神经元突触重塑看权重的冷热之分

大模型并不是真正的记忆:从神经元突触重塑看权重的冷热之分昨天老妈在厨房里找东西时,发生了一幕全家人都极其熟悉的生活小插曲:老妈站在调料架前,拍了拍脑门:"哎呀!我刚才明明记得把新买的白胡椒粉放…

2026/9/23 23:38:58 阅读更多 →
长辈友好型节气动态插画工程:纯 SVG 矢量绘制与轻量 CSS 路径动画

长辈友好型节气动态插画工程:纯 SVG 矢量绘制与轻量 CSS 路径动画

长辈友好型节气动态插画工程:纯 SVG 矢量绘制与轻量 CSS 路径动画在很多针对长辈的节气提醒与家庭生活看板中,工程师为了展示节气氛围,常常直接在页面中嵌入体积庞大的 GIF 动图或 MP4 短视频。 但在家庭低功耗平板、电子相框或老式电视盒子上…

2026/9/23 23:38:58 阅读更多 →
OK交易所Python API封装实战:现货、杠杆与历史数据调用指南

OK交易所Python API封装实战:现货、杠杆与历史数据调用指南

简介:这份Python资源包围绕OKEx交易所Web API的调用展开,面向希望用代码接入加密货币市场的开发者与量化交易初学者。内容覆盖杠杆交易、现货交易、历史记录与历史数据获取等核心场景,并涉及MVC架构下的应用组织方式,适合具备Pyth…

2026/9/23 23:37:58 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →