首页 > 解决方案 > 使用多个插入准备查询

问题描述

我需要在表单上创建一个包含多个插入的查询

insert into product_ohlcv_history (broker_id, product_id, timestamp, open, high, low, close, volume, timeframe)
 values
(1, 'XX', 2020-01-16T10:00:00.000z", 4, 5, 6, 7, 8),
(1, 'XX', 2020-01-16T10:01:00.000z", 4, 5, 6, 9, 8),
(1, 'XX', 2020-01-16T10:02:00.000z", 4, 5, 6, 9, 8)
on conflict (broker_uuid, product_id, timestamp) do nothing;

插入的数量是未知的,所以在一个查询中我可以插入十个值,在另一个插入 90 个值等等(它们取决于从另一个来源检索的数据)。

我想在 libpqxx 中为您的查询准备一个语句。我已经准备好了声明

pqxx::connection* m_connection;
// ...

namespace Query {

namespace Name {

constexpr auto InsertOHLCList{ "insertohlcvlist" };

} // namespace Name

constexpr auto InsertOHLCList{ "insert into product_ohlcv_history (broker_uuid, product_id, timestamp, open, high, low, close, volume, timeframe) values $1 on conflict (broker_uuid, product_id, timestamp) do nothing;" };

} // namespace Query

m_connection->prepare(Query::Name::InsertOHLCList, Query::InsertOHLCList);

然后我在我的代码中创建值字符串并将其替换为$1. 问题是 libpqxx 在准备语句时给了我一个错误:

Failure during '[PREPARE insertohlcvlist]': ERROR:  syntax error at or near "$1"
LINE 1: ...open, high, low, close, volume, timeframe) values $1 on conf...

准备具有多个插入的语句的正确方法是什么?

标签: c++postgresqlprepared-statementlibpqxx

解决方案


推荐阅读