We’re using dotenv above, but if you’re using something like Next.js, Remix, Astro, or Vite, you can use their built-in environment variables manager to source these values.
5
Connect Drizzle with libSQL
Copy
import { drizzle } from "drizzle-orm/libsql";import { createClient } from "@libsql/client";const turso = createClient({ url: process.env.TURSO_DATABASE_URL!, authToken: process.env.TURSO_AUTH_TOKEN,});export const db = drizzle(turso);
6
Database migrations
Drizzle can generate and apply database migrations with drizzle-kit.
Whenever you make changes to the schema, run db:generate:
Copy
npm run db:generate
Now apply these changes to the database with db:migrate:
Copy
npm run db:migrate
7
Query
Copy
import { db } from "./db";import { fooTable } from "./schema";const result = await db.select().from(fooTable).all();
import { drizzle } from "drizzle-orm/libsql";import { createClient } from "@libsql/client";const client = createClient({ url: process.env.TURSO_DATABASE_URL!, authToken: process.env.TURSO_AUTH_TOKEN,});const db = drizzle(client);await db.run(sql` CREATE INDEX IF NOT EXISTS vector_index ON vector_table(vector) USING vector_cosine(3)`);
4
Insert vector data
Copy
await db .insert(vectorTable) .values([{ vector: sql`vector32(${JSON.stringify([1.1, 2.2, 3.3])})` }]);
5
Query vector data
Calculate vector distance:
Copy
const res = await db .select({ distance: sql<number>`vector_distance_cos(${vectorTable.vector}, vector32(${JSON.stringify([2.2, 3.3, 4.4])}))`, }) .from(vectorTable);console.log(res);