Drizzle-ORM findMany查询非空列返回null问题求助
解决Drizzle-ORM查询中自动填充列返回null的问题
1. 检查Drizzle Schema是否包含k_value列
Drizzle基于你定义的Schema生成查询语句,如果Schema里没声明k_value,查询结果自然不会包含这个字段,表现为null。确保你的Schema定义中存在该列:
import { integer, pgTable, real, varchar } from 'drizzle-orm/pg-core'; export const games = pgTable('games', { id: integer('id').primaryKey().generatedAlwaysAsIdentity(), name: varchar('name').notNull(), bgg_weight: real('bgg_weight'), k_value: integer('k_value'), // 必须添加这一行定义 });
2. 强制在查询中指定返回k_value列
有时候Drizzle的默认findMany可能不会返回所有列,手动指定columns选项确保该字段被包含:
const games = await db.query.games.findMany({ columns: { id: true, name: true, bgg_weight: true, k_value: true, // 明确指定要返回该列 }, orderBy: (model, { desc }) => desc(model.name), }); console.log(games);
3. 查看Drizzle生成的实际SQL语句
开启Drizzle的日志功能,确认生成的SELECT语句中是否包含k_value:
// 初始化Drizzle时开启日志 import { drizzle } from 'drizzle-orm/postgres-js'; import postgres from 'postgres'; const client = postgres(process.env.DATABASE_URL); const db = drizzle(client, { logger: true });
运行查询后,控制台会打印执行的SQL,如果SELECT里没有k_value,说明Schema定义有问题,回到第一步修正。
4. 验证触发器的触发范围
确认你的触发器是在INSERT和UPDATE时都触发,避免只有INSERT触发导致更新后数据不一致:
-- 重新创建触发器的示例语句 CREATE TRIGGER set_k_value BEFORE INSERT OR UPDATE ON games FOR EACH ROW EXECUTE FUNCTION calculate_k_value();
5. 用原始SQL验证Drizzle连接的数据库
执行原始SQL查询,确认Drizzle连接的数据库中k_value确实有值:
import { sql } from 'drizzle-orm'; const rawResult = await db.execute(sql`SELECT name, k_value FROM games ORDER BY name DESC`); console.log(rawResult.rows);
如果这个查询返回的k_value正常,说明是Drizzle的查询配置问题;如果也返回null,那要检查数据库连接是否指向正确的环境(比如开发/生产环境搞混)。
内容的提问来源于stack exchange,提问作者Traconis
相关产品推荐
相关产品推荐

