You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Drizzle ORM连接Turso数据库遇问题,求建表指导

解决Turso+Drizzle连接及写入报错问题

报错原因直白解释

你碰到的TypeError: Cannot read properties of undefined (reading 'Symbol(drizzle:Columns)')错误,本质是两个问题叠加:

  1. 你定义的tips表结构不符合Drizzle的要求,导致程序识别不出表的列信息;
  2. 你的Turso数据库里根本还没创建tips表,就算结构对了也没地方写数据。

下面一步步解决所有问题:


第一步:配置Turso数据库连接

1. 安装必要依赖

先在项目里装Drizzle和Turso的客户端工具:

npm install drizzle-orm @libsql/client drizzle-kit

2. 创建数据库连接文件

在项目里新建db/index.js(用TS就建.ts),写入以下代码:

import { createClient } from '@libsql/client';
import { drizzle } from 'drizzle-orm/libsql';

// 从环境变量读取Turso的连接信息,你需要先去Turso控制台创建数据库,拿到URL和认证令牌
const client = createClient({
  url: process.env.TURSO_DB_URL,
  authToken: process.env.TURSO_DB_AUTH_TOKEN,
});

export const db = drizzle(client);

3. 设置环境变量

在项目根目录新建.env文件,填入你的Turso数据库信息:

TURSO_DB_URL=你的Turso数据库URL
TURSO_DB_AUTH_TOKEN=你的Turso数据库认证令牌

第二步:正确定义tips表结构

新建db/schema/tips.js(或.ts),用Drizzle的规范定义表结构,这样程序才能识别列:

import { sql } from 'drizzle-orm';
import { sqliteTable, text } from 'drizzle-orm/sqlite-core';

// 定义tips表,括号里的'tips'是数据库里的表名
export const tips = sqliteTable('tips', {
  id: text('id').primaryKey(), // id字段,作为主键
  textContent: text('text_content').notNull(), // 文本内容,不能为空
  tag: text('tag').notNull(), // 标签字段,不能为空
  createdAt: text('created_at').default(sql`CURRENT_TIMESTAMP`), // 可选:自动记录创建时间
});

注意:必须用Drizzle提供的sqliteTable和字段类型(比如text)来定义,不能自己随便写对象,不然程序识别不了列,还是会报错。


第三步:初始化数据库表

现在数据库里还没有tips表,用Drizzle Kit自动创建:

1. 添加脚本到package.json

打开package.json,在scripts里加一行:

{
  "scripts": {
    "db:push": "drizzle-kit push:sqlite"
  }
}

2. 执行创建表的命令

在终端运行:

npm run db:push

这个命令会读取你定义的表结构,自动在Turso数据库里创建tips表。


第四步:修复写入函数

现在你的createTip函数可以正常工作了,建议加个错误捕获方便排查问题:

"use server"

import { db } from "./db";
import { tips } from './db/schema/tips';

export async function createTip(textContent, tag) {
  try {
    const tipDetails = {
      id: crypto.randomUUID(),
      textContent,
      tag,
    };

    await db.insert(tips).values(tipDetails);
    return { success: true };
  } catch (error) {
    console.error('写入数据失败:', error);
    return { success: false, error: error.message };
  }
}

内容的提问来源于stack exchange,提问作者Ethan Deardorff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:25:05