Prisma连接已运行数据库

在此页面上,你将学习如何:

  • 安装 Prisma CLI
  • 使用 Docker 设置 Prisma
  • Introspect 现有数据库并派生数据模型
  • 使用 datamodel 配置 Prisma API
  • 生成 Prisma client
  • 使用 Prisma client 读取和写入数据

使用 Prisma 连接现有数据库目前仅在使用 PostgreSQL数据库时才有效。

确保手头有数据库的连接详细信息。这包括以下信息:

  • Host:Postgres 服务器的主机,例如localhost
  • Port:Postgres 服务器侦听的端口,例如5432
  • User & Password:Postgres 服务器的凭据。
  • 现有database 的名称:Postgres database的名称。
  • 现有schema 的名称:Postgres schema的名称,例如public

你还需要知道你的数据库服务器是否使用 SSL

Prisma CLI 用于各种 Prisma 工作流程。你可以使用HomebrewNPM安装它:

 
brew tap prisma/prisma
brew install prisma
 
npm install -g prisma

要在本地使用 Prisma,你需要在计算机上安装Docker。如果你还没有 Docker,可以下载适用于你的操作系统的 Docker Community Edition 此处

不想使用 Docker?你现在也可以开始使用demo database

 
mkdir hello-world
cd hello-world

要在你的计算机上启动 Prisma,你需要一个Docker Compose 文件来配置 Prisma 并指定它可以连接到哪个数据库:

 
touch docker-compose.yml

将以下内容粘贴到刚刚创建的 Docker Compose 文件中:

 
version: '3'
services:
  prisma:
    image: prismagraphql/prisma:1.33
    restart: always
    ports:
    - "4466:4466"
    environment:
      PRISMA_CONFIG: |
        port: 4466
        databases:
          default:
            connector: postgres
            host: __YOUR_POSTGRES_HOST__
            port: __YOUR_POSTGRES_PORT__
            database: __YOUR_POSTGRES_DB__
            schema: __YOUR_POSTGRES_SCHEMA__
            user: __YOUR_POSTGRES_USER__
            password: __YOUR_POSTGRES_PASSWORD__
            migrations: false
            ssl: __SSL_CONNECTION__

# MySQL Coming soon. See https://github.com/prisma/prisma/issues/2506

要指定 Prisma 应连接的数据库,请将 Docker Compose 文件中拼写为全大写的占位符替换为数据库的相应值:

  • __YOUR_POSTGRES_HOST__:Postgres 服务器的主机,例如localhost。 (连接到本地数据库时,可能需要使用host.docker.internal。)
  • __YOUR_POSTGRES_PORT__:Postgres 服务器侦听的端口,例如5432
  • __YOUR_POSTGRES_DB__:Postgres 数据库的名称。
  • __YOUR_POSTGRES_SCHEMA__:Postgres 架构的名称,例如public
  • __YOUR_POSTGRES_USER__:数据库用户。
  • __YOUR_POSTGRES_PASSWORD__:数据库用户的密码。
  • __SSL_CONNECTION__:数据库服务器是否使用 SSL,可能的值为“true”和“false”。

要启动 Prisma 并启动已连接的数据库,请运行以下命令:

 
docker-compose up -d

你的本地 Prisma 服务器现在在http://localhost:4466上运行。

接下来,你需要创建一个prisma.yml:

 
touch prisma.yml

现在添加以下内容:


endpoint: http://localhost:4466

endpoint需要匹配正在运行的 Prisma 服务器的 URL。

你现在需要内省数据库模式以生成数据模型,这是 Prisma client API 的基础:

 
prisma introspect

CLI 生成datamodel- [TIMESTAMP] .graphql(例如datamodel-1533886167692.graphql)文件,其中包含数据库模式的 SDL 版本。在第一次运行时,它还将datamodel属性写入prisma.yml

最后,你需要将文件重命名为datamodel.prisma,因为这是你在prisma.yml中指定的文件名。

你现在可以使用minimal设置来部署 Prisma API。运行以下命令(这 不会改变数据库中的任何内容):

 
prisma deploy

启动 Prisma 服务器可能需要几分钟时间。如果prisma deploy命令失败,请等待几分钟再试一次。还运行docker ps以确保 Docker 容器实际运行。

Prisma client 是一个自定义的自定义库,可以连接到你的 Prisma API。将以下行附加到prisma.yml的末尾:

 
generate:
  - generator: javascript-client
    output: ./generated/prisma-client/

现在使用以下命令生成 client :

 
prisma generate

CLI 现在将你的 Prisma client 存储在prisma. client目录中,如prisma.yml中所指定。

运行以下命令以创建空节点脚本:

 
touch index.js

接下来,初始化当前目录中的空 NPM 项目并安装所需的依赖项:

 
npm init -y
npm install --save prisma-client-lib graphql@0.13

Prisma client 的 API 操作取决于从数据库内省生成的数据模型。以下示例查询假定数据模型中存在“User”类型,定义如下:


type User {
  id: ID! @id
  name: String!
}

如果你没有这样的“用户”类型,则需要使用与你的数据模型匹配的类型调整以下代码段。

index.js中添加以下代码并在之后保存:

 
const { prisma } = require('./generated/prisma-client')
async function main() {
  const newUser = await prisma.createUser({ name: 'Alice' })
  console.log("Created new user: ${newUser.name} (ID: ${newUser.id})")
  const allUsers = await prisma.users()
  console.log(allUsers)
}
main().catch(e => console.error(e))

使用以下命令执行:

 
node index.js

每当使用该命令运行此脚本时,都会在数据库中创建一个新的用户记录(因为调用了createUser)。

随意使用 Prisma client API,并通过将以下代码片段添加到文件(在main函数的末尾)并重新执行脚本来尝试以下一些操作:

 
const user = await prisma
  .user({ id: '__USER_ID__' })
 
const usersCalledAlice = await prisma
  .users({
    where: {
      name: 'Alice'
    }
  })
 
 const updatedUser = await prisma
  .updateUser({
    where: { id: '__USER_ID__' },
    data: { name: 'Bob' }
  })
 
 const deletedUser = await prisma
  .deleteUser({ id: '__USER_ID__' })

在某些代码段中,你需要将__USER__ID__占位符替换为实际用户的 ID。

返回