You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Prisma Python客户端连接PostgreSQL遇引擎连接错误求助

问题描述

使用Prisma Python客户端连接本地Docker部署的PostgreSQL时,持续报错prisma.engine.errors.EngineConnectionError: Could not connect to the query engine。此前在1G内存、1CPU的CentOS 8.5服务器上,Nextjs中的Prisma及prisma==0.13.1均可正常运行,迁移到15vCPUs、16GB内存的同系统VM后出现该问题。已确认数据库连接字符串正确,psycopg2可成功连接,但Prisma Python客户端测试失败,日志中DEBUG:prisma._base_client:datasources: None条目存在异常。

环境信息
  • 系统:CentOS Linux release 8.5.2111
  • Python:3.8.18(源码编译安装)
  • Prisma Python客户端版本:0.15.0(0.13.1版本同样失效)
  • Prisma CLI版本:5.17.0(已执行prisma generate)
相关配置与测试代码

Prisma schema文件

// database
datasource db {
  provider = "postgres"
  url      = env("DATABASE_URL")
}

// generator
generator client {
  provider             = "prisma-client-py"
  recursive_type_depth = 5
  interface            = "sync"
}

model User {
  id    String @id @unique
  email String @unique
}

.env文件

DATABASE_URL=postgres://myuser:mypassword@127.0.0.1:5432/mydatabase?sslmode=disable

PostgreSQL Docker Compose配置

version: '3.8'

services:
  db:
    image: postgres:latest
    container_name: postgres_db
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydatabase
    ports:
      - "5432:5432"
    volumes:
      - db_data:/var/lib/postgresql/data
    restart: always

volumes:
  db_data:

psycopg2测试代码及结果

import psycopg2
from psycopg2 import OperationalError


def test_connection():
    try:
        connection = psycopg2.connect(
            "postgres://myuser:mypassword@127.0.0.1:5432/mydatabase"
        )
        print("Connection successful!")
        connection.close()
    except OperationalError as e:
        print(f"Connection failed! Error: {e}")


if __name__ == "__main__":
    test_connection()

执行结果:

Connection successful!

Prisma Python客户端测试代码

from prisma import Prisma
import logging
from dotenv import load_dotenv
import os
import asyncio

load_dotenv()
DATABASE_URL = os.getenv("DATABASE_URL")

logging.basicConfig(level=logging.DEBUG)

async def run():
    db = Prisma()
    print(DATABASE_URL)
    await db.connect()
    print("Connected to PostgreSQL database successfully!")
    await db.disconnect()

if __name__ == "__main__":
    asyncio.run(run())

错误日志摘要

DEBUG:prisma._base_client:datasources: None
DEBUG:prisma.engine._query:Running query engine on port 59631
DEBUG:httpcore.connection:connect_tcp.failed exception=ConnectError(ConnectionRefusedError(111, 'Connection refused'))
...
prisma.engine.errors.EngineConnectionError: Could not connect to the query engine
解决方案

1. 修复数据源加载问题,手动传入连接参数

日志中datasources: None说明Prisma客户端未正确读取schema中的数据源配置,可在初始化客户端时手动指定:

from prisma import Prisma
import os
from dotenv import load_dotenv

load_dotenv()

# 手动指定数据源
db = Prisma(datasources={'db': os.getenv('DATABASE_URL')})

2. 切换为同步客户端模式

schema中generator指定了interface = "sync",应使用同步客户端而非异步模式,修改测试代码:

from prisma import Prisma
import logging
from dotenv import load_dotenv
import os

load_dotenv()
DATABASE_URL = os.getenv("DATABASE_URL")

logging.basicConfig(level=logging.DEBUG)

def run():
    db = Prisma(datasources={'db': DATABASE_URL})
    print(DATABASE_URL)
    db.connect()
    print("Connected to PostgreSQL database successfully!")
    db.disconnect()

if __name__ == "__main__":
    run()

3. 验证查询引擎依赖与权限

  • 检查查询引擎二进制文件权限:
    chmod +x /root/.cache/prisma-python/binaries/5.17.0/393aa359c9ad4a4bb28630fb5613f9c281cde053/node_modules/prisma/query-engine-rhel-openssl-1.1.x
    
  • CentOS 8默认可能缺少OpenSSL 1.1.x,安装对应依赖:
    dnf install openssl1.1
    

4. 重新生成Prisma客户端

确保CLI与客户端版本兼容,删除旧生成文件后重新生成:

rm -rf prisma/client
prisma generate

内容的提问来源于stack exchange,提问作者alex fan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:47:33