Как выполнить sql с динамическими параметрами в pqxx7

#c #sql #linux #insert #libpqxx

#c #sql #linux #вставить #libpqxx

Вопрос:

Я хочу выполнить sql с помощью параметров dynamci

Я могу найти коды, подобные следующим, в pqxx4

 work txn(*conn);
pqxx::result r = txn.prepared("insert into mytable (a,b,c,d,e) values (1,2,$1,$2,$3)")(person_name)(age)(sex).exec();
txn.commit();
 

но я использую pqxx версии 7, код не может поддерживать.

итак, как выполнить sql с динамическими параметрами в pqxx7?

 using FieldValue = std::variant<int32_t, int64_t, float, double, std::string, bool>

std::string tableName = "mytable";
std::vector<std::string> columNames{"a", "b", "c", "d", "e", ...};
std::vector<FieldValue >{1, "", 2, "", 5L ...};

std::string sql = "INSERT INTO ""   tableName   ""(";
for (int i = 0; i < colums.size(); i  )
{
  if (i > 0)
  {
    sql  = ", ";
  }
  sql  = colums[i];
}
sql  = " ) VALUES ( ";
for (int i = 0; i < colums.size(); i  )
{
  if (i > 0)
  {
    sql  = ", ";
  }
  sql  = "$"   std::to_string(i   1);
}
sql  = " )";

pqxx::connection conn{...};
conn.prepare("test", sql);
pqxx::work work(conn);


 

как сделать?

Ответ №1:

Я думаю, что то, что вы ищете, находится в разделе документации по подготовленным операторам (извините, нет ссылки, поскольку она постоянно меняется)

 pqxx::connection conn;
conn.prepare("insert_statement", "insert into mytable(a, b, c, d, e) values (1, 2, $1, $2, $3)");
 

Затем в какой-то более поздний момент:

 pqxx::transaction txn(conn);
txn.exec_prepared("insert_statement", field_value3, field_value4, field_value5);
 

Если вы собираетесь вставлять строки, используйте:

 txn.esc(field_value)
 

Существуют различные способы выполнения подготовленных инструкций, но это что-то похожее на то, что я сейчас использую с libpqxx 7.x.