@alchemy.run/sql (中文(简体) )
SQL 为 炼金术. 为 Postgres, MySQL 和 SQLite (libSQL) 键入效果 SQL 客户端,为每个数据库资源部署时间迁移,以及一个 Postgres 状态商店.
npm install alchemy @alchemy.run/sql @effect/sql-pg pg effect
从任何运行时间查询 Postgres 。 连接在请求的第一个查询中打开, 当请求结束时关闭, 所以在部署时没有连接 :
// src/worker.ts
import * as Cloudflare from "@alchemy.run/cloudflare";
import * as SQL from "@alchemy.run/sql/Postgres";
import * as Config from "effect/Config";
import * as Effect from "effect/Effect";
import * as HttpServerResponse from "effect/http/HttpServerResponse";
export default Cloudflare.Worker(
"Worker",
{ main: import.meta.url },
Effect.gen(function* () {
const sql = yield* SQL.Postgres({ url: Config.Redacted("DATABASE_URL") });
return {
fetch: Effect.gen(function* () {
const users = yield* sql`SELECT * FROM users`;
return yield* HttpServerResponse.json(users);
}).pipe(Effect.orDie),
};
}),
);
同样的形状对 MySQL 和 SQLite 有效 :
| 数据库 | 导入 | 驱动程序 |
|---|---|---|
| 邮资 | @alchemy.run/sql/Postgres | @effect/sql-pg, (中文(简体) ), pg |
| MySQL 数据 | @alchemy.run/sql/MySQL | @effect/sql-mysql2, (中文(简体) ), mysql2 |
| SQLite( libSQL, Turso, 本地文件) | @alchemy.run/sql/SQLite | @effect/sql-libsql |
保留 Alchemy在您已经运行的 Postgres 数据库中的状态 :
// alchemy.run.ts
import * as Alchemy from "alchemy";
import { postgresState } from "@alchemy.run/sql/PostgresState";
import * as Config from "effect/Config";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
export default Alchemy.Stack(
"MyApp",
{
providers: Layer.empty,
state: postgresState({ url: Config.Redacted("STATE_DATABASE_URL") }),
},
Effect.gen(function* () {
return {};
}),
);