使用pqxx获取和发布表类型

本文关键字:布表 类型 pqxx 获取 使用 | 更新日期: 2023-09-27 18:08:08

大家好。我正在使用pqxx,我有一些问题。

1。我有两个表:table1 (table1_id integer) and table2 (table1_id integer, another_id integer),一对多关系。我怎么能很容易地获得信息,在视图:table1_id,向量another_ids?现在我在脚本中使用序列化(字符串连接成"%d %d %d…"),在我的c++代码中使用反序列化。此外,我需要插入值到表1。我怎样才能在一次交易中完成呢?

2。我调用像

这样的存储过程
    t.exec("SELECT * FROM my_proc(some_argument)");

可能存在任何方法来做到这一点,像在c#?

非常感谢!

使用pqxx获取和发布表类型

所以,也许它可以帮助别人。

在第一种情况下我发现并使用两种方法:1. sql函数中的组连接和c++中的反序列化。如果table2只有table1_id和另一个整数,则速度很快。2. 我调用两个函数:get_table1()和get_table2(),顺序是table1_id。然后用两个指针创建table1数组

std::vector<Table1> table1Array;
auto ap = wrk.prepared(GetTable1FuncName).exec();
auto aps = wrk.prepared(GetTable2FuncName).exec();
auto pos = aps.begin();
for (auto row = ap.begin(); row != ap.end(); ++row) {
    std::vector<Table2> table2Array;
    while (pos != aps.end()
           && row["table1_id"].as(int()) == pos["table1_id"].as(int())) {
        table2Array.push_back(Table2(pos["first_id"].as(int()), 
                                     pos["second_string"].as(std::string())));
        ++pos;
    }
    Table1 tb1(row["table1_id"].as(int()), row["column2"].as(int()),
               row["column3"].as(int()), row["column4"].as(int()),
               table2Array);
    table1Array.push_back(tb1);
}

也许它不漂亮,但它在工作。插入到数据库我写的一个元素。首先插入到表1中,然后插入到表2中。After call pqxx::work.commit() .

第二种情况 Not,不存在。还要记住,函数总是返回1行!小心!