サーバーレスドライバー
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
関数は次の引数を受け入れます。
名前 | 型 | 必須 | 説明 |
---|---|---|---|
connectionString | string | はい | Prisma Postgresインスタンスの接続文字列。 |
deserialize | Deserialize | いいえ | 列の型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 ] ]
}
制限事項
- トランザクションサポートなし。
- ローカルPrisma Postgresのサポートなし。