【发布时间】:2022-08-14 06:25:06
【问题描述】:
我正在尝试将 JSON 数组泵入 MYSQL 数据库,我已经找到了类似的东西,但该解决方案对我不起作用。 Similiar issue i found
这是我首先尝试从请求中对正文进行字符串化,然后通过
INSERT INTO table SET ?
表创建如下:
CREATE TABLE IF NOT EXISTS db.AStockHistory
( Symbol text NOT NULL,
Date timestamp NOT NULL,
Open double,
High double,
Low double,
Close double,
Volume double,
Dividends double,
Stock_Splits double );
我的 NodeJS 代码:
async function create(stockHistory){
var data = JSON.stringify(stockHistory);
const result = await db.query(
`INSERT INTO db.AStockHistory SET ?`, data);
return {message};
}
这是我尝试通过邮递员推送的完整 JSON 数组。 JSON 的生成结构由 pandas 数据框构成。
[
{
Symbol: \'msft\',
Date: \'2022-07-20 00:00:00\',
Open: 259.8999938965,
High: 264.8699951172,
Low: 258.9100036621,
Close: 262.2699890137,
Volume: 22788300,
Dividends: 0,
Stock_Splits: 0
},
{
Symbol: \'msft\',
Date: \'2022-07-21 00:00:00\',
Open: 259.7900085449,
High: 264.8900146484,
Low: 257.0299987793,
Close: 264.8399963379,
Volume: 22404700,
Dividends: 0,
Stock_Splits: 0
},
{
Symbol: \'msft\',
Date: \'2022-07-22 00:00:00\',
Open: 265.2399902344,
High: 265.3299865723,
Low: 259.0700073242,
Close: 260.3599853516,
Volume: 21871000,
Dividends: 0,
Stock_Splits: 0
},
{
Symbol: \'msft\',
Date: \'2022-07-25 00:00:00\',
Open: 261,
High: 261.5,
Low: 256.8099975586,
Close: 258.8299865723,
Volume: 21056000,
Dividends: 0,
Stock_Splits: 0
},
{
Symbol: \'msft\',
Date: \'2022-07-26 00:00:00\',
Open: 259.8599853516,
High: 259.8800048828,
Low: 249.5700073242,
Close: 251.8999938965,
Volume: 38096200,
Dividends: 0,
Stock_Splits: 0
}
]
我得到以下输出:
您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近 \'\'[{\"符号\":\"msft\",\"日期\":\"2022-07-20 00:00:00\",\"Open\":259.8999938965,\' 在第 1 行你有一个错误 你的 SQL 语法;检查与您的 MySQL 对应的手册 服务器版本,以便在附近使用正确的语法 \'\'[{\"符号\":\"msft\",\"日期\":\"2022-07-20 00:00:00\",\"Open\":259.8999938965,\' 在第 1 行错误:您有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,以便在附近使用正确的语法 \'\'[{\"符号\":\"msft\",\"日期\":\"2022-07-20 00:00:00\",\"Open\":259.8999938965,\' 在第 1 行 在 PromiseConnection.query
-
你试过
db.query(`INSERT INTO db.AStockHistory VALUES (?)`, data);吗? -
使用插入..选择。在 SELECT 部分使用 JSON_TABLE() 解析您的数组以分隔行和列值。 PS。不要将 DOUBLE 用于整数属性,不要将 TEXT 用于短字符串。并且,如果日期值不是本地的,则使用 DATETIME(如果时间部分始终为零 - 使用 DATE)。
-
@GrafiCode 我试过但同样的错误。
-
@Akina 感谢您的想法,我也会尝试。我刚刚看到这种方式应该可行,就像我在另一个 stackoverflow 问题中提到的那样。为此,我只想保持简单。并将其推入数据库而不进行任何进一步的操作。但是,好的,现在我尝试通过分开来完成它。表调整,好点。会检查的。
-
注意!显示的参数值(对象数组)不是来自 MySQL 的有效 JSON 值。