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

Strapi v4 TypeScript环境下原生SQL查询方法求助

在Strapi v4 TypeScript环境中执行原生SQL查询的解决方案

Strapi v4重构了数据库层,原v3中的strapi.db.connection不再直接可用,TypeScript环境下可通过以下两种方式执行原生SQL查询:

方法一:通过模型获取Knex实例

Strapi v4底层基于Knex处理数据库操作,你可以通过任意模型的query方法拿到对应的Knex连接,进而执行原生查询:

// 示例:使用内置的用户模型,可替换为你的自定义模型
const knex = strapi.db.query('plugin::users-permissions.user').knex;
const data = await knex.raw(`SELECT * FROM your_table_name`);

方法二:直接获取全局数据库客户端

如果不需要关联特定模型,可直接从Strapi实例中获取Knex连接,需手动补充类型断言以适配TypeScript:

const knex = strapi.db.connection as typeof import('knex');
const data = await knex.raw(`SELECT * FROM your_table_name`);

类型提示优化(可选)

若TypeScript仍存在类型报错,可在项目根目录创建types/knex.d.ts声明文件,补充类型定义:

import 'knex';

declare module '@strapi/strapi' {
  interface Strapi {
    db: {
      connection: import('knex').Knex;
    };
  }
}

注意:执行原生SQL时务必防范SQL注入风险,推荐使用参数化查询:

const targetId = 123;
const data = await knex.raw(`SELECT * FROM your_table WHERE id = ?`, [targetId]);

内容的提问来源于stack exchange,提问作者Mauro Zadunaisky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:26:27