メインコンテンツにスキップ

サーバーレスドライバー

Prisma Postgres用サーバーレスドライバーは、生のSQLを使用してPrisma Postgresと通信できる軽量で最小限のクライアントライブラリです。@prisma/ppg npmパッケージを介して使用できます。

警告

Prisma Postgresサーバーレスドライバーは現在早期アクセス段階であり、本番環境での使用はまだ推奨されていません。

インストール

npm経由でサーバーレスドライバーをインストール

npm install @prisma/ppg

使用方法

ほとんどのユーザーに推奨されるAPIは、テンプレートリテラルタグ関数として実装された高レベルのSQLクライアントを返すppg関数です。

import { ppg } from "@prisma/ppg";

type Post = {
id: number;
title: string;
content: string | null;
published: boolean;
authorId: number | null;
}

const sql = ppg("prisma+postgres://accelerate.prisma-data.net/?api_key=...");

const authorId = 1;
const posts = await sql<Post>`SELECT * FROM "Post" WHERE "authorId" = ${authorId}`;

APIリファレンス

ppg

ppg関数は、テンプレートリテラルタグ関数として実装された高レベルのSQLクライアントを返します。

function ppg(connectionString: string, deserialize?: Deserialize): Sql;

interface Sql {
<Record = unknown>(strings: TemplateStringsArray, ...values: unknown[]): Promise<Record[]>;
/**
* Executes a raw query defined as a string with placeholders and the list
* of parameters.
*
* ```ts
* const [user] = await sql.query<User>("SELECT * FROM users WHERE id = $1", [id]);
* ```
*/
query<Record>(query: string, ...params: unknown[]): Promise<Record[]>;
}
type Deserialize = (value: unknown, oid: unknown) => unknown;

返されるSqlオブジェクト

  • SQLステートメントをテンプレートリテラルとして受け入れます。補間された値が含まれている場合、SQLインジェクション攻撃を防ぐために、これらは自動的にSQLパラメーターに変換されます(例については以下を参照)。
  • Prismaモデルの構造を反映したオブジェクトの配列としてデータを返します。
  • query関数を提供します。
    • 生の文字列とパラメーターのリストを別々に受け取り、SQLパラメーターを自分で制御したり、必要に応じてクエリを安全でない方法で連結したりできます。
    • 行をオブジェクトの配列に変換することなく、列の型と生のデータを返します。

引数

ppg関数は次の引数を受け入れます。

名前必須説明
connectionStringstringはいPrisma Postgresインスタンスの接続文字列。
deserializeDeserializeいいえ列の型OIDと生の値を引数に取り、マッピングされた値を返すカスタムのデシリアライザー関数。その型はtype Deserialize = (value: unknown, oid: unknown) => unknownとして定義されています。

使用方法

import { ppg } from "@prisma/ppg";

type Post = {
id: number;
title: string;
content: string | null;
published: boolean;
authorId: number | null;
}

type User = {
id: number;
email: string
}

const sql = ppg("prisma+postgres://accelerate.prisma-data.net/?api_key=...");

const posts: Post[] = await sql<Post>`SELECT * FROM "Post"`

const userId = 42;
const user: User[] = await sql<User>`SELECT * FROM "User" WHERE "id" = ${userId}`

Client

Clientクラスはより低レベルの制御を提供し、より注意して使用する必要があります。

class Client implements Queryable {
constructor(options: ClientOptions);

/**
* Executes a query against the Prisma Postgres database.
*/
query(query: string, parameters: unknown[]): Promise<QueryResponse>;
}

公開するquery関数

  • 生の文字列とパラメーターのリストを別々に受け取り、SQLパラメーターを自分で制御したり、必要に応じてクエリを安全でない方法で連結したりできます。
  • 行をオブジェクトの配列に変換することなく、列の型と生のデータを返します。

使用方法

import { Client } from "@prisma/ppg";

const client = new Client({
connectionString: "prisma+postgres://accelerate.prisma-data.net/?api_key=...",
});

const posts = await client.query('SELECT * FROM "Post" WHERE "authorId" = $1', [1]);

このクエリは、この構造のオブジェクトを返します。

{
columns: [
{ name: 'id', oid: 23 },
{ name: 'title', oid: 25 },
{ name: 'content', oid: 25 },
{ name: 'published', oid: 16 },
{ name: 'authorId', oid: 23 }
],
rows: [ [ 1, 'Hello World', 'This is the content of the post', true, 1 ] ]
}

制限事項

© . All rights reserved.