javascript - 如何让 knex 在 sqlite 中使用 JSON?
问题描述
好吧,说我有一个数据库,它是一个用于测试目的的特定“模拟”,因此是一个基于内存的 sqlite 数据库——主数据库在哪里使用 postgres:
import knexBuilder = require("knex");
const theDb = knexBuilder({
client: 'sqlite3',
connection: {
filename: ":memory:"
},
useNullAsDefault: true,
pool: {
min: 1,
max: 1,
idleTimeoutMillis: 360000 * 1000
},
});
await theDb.schema.createTable("test", (table) => {
table.increments('id');
table.json("json_test").nullable();
});
当我为此调用列信息时await theDb.table('test').columnInfo();
这是回应:
{
"id":{"type":"integer","maxLength":null,"nullable":false,"defaultValue":null},
"json_test":{"type":"json","maxLength":null,"nullable":true,"defaultValue":null}
}
但是,当我尝试像这样进行插入检索循环时:
await theDb.insert({
id: 1,
test_json: {
"abc": 10,
"def": "hello",
"ghi": 20,
},
}).into("test");
const retrieved = await theDb.select('id', 'test_json').from('test').where('id', 1);
结果是:[{id: 1, test_json: null}];
。这似乎表明没有存储json?使用“toString()”打印查询表明它确实将 json 放入了值中:
insert into `test` (`id`, `test_json`) values (1, {"abc":10,"def":"hello","ghi":20})
我注意到 SQLITE 默认不支持 JSON,但是 SQLite 支持 JSON 扩展:https ://www.sqlite.org/json1.html
那么我如何告诉 knex “json 很好,只需使用扩展名”?或者我可以在不破坏代码的情况下使用 json 进行测试的任何其他想法?其余代码依赖于 JSON,如果“如果在测试期间运行”,则到处更改以使用文本/JSON 序列化会有点愚蠢。
解决方案
推荐阅读
- php - mySQL combine WHERE IN (?,?,?,..) clause with %?%
- react-native - 如何加密音频文件,然后解密并在本机反应中播放?
- html - 使文本选择将相邻元素视为单独的单词
- micronaut - 我们如何知道 Micronaut 中功能和可用功能的确切名称?
- google-sheets - 如何在查询函数中使用单元格中的文本作为参考
- java - Navigation Drawer 在特定活动中可用,而不是启动屏幕
- python - 如何获取字典列表并根据键值将它们拆分
- android - java.lang.NullPointerException 尝试调用虚方法 ShimmerFrameLayout.startShimmer()
- .net - 如何在同一类中创建类实例的动态列表
- cgal - 如何在不重复的情况下加入两个 CGAL::Point_set_3