如何使用复合键在 SQLite ORM 中插入条目

How to insert an entry in SQLite ORM with a composite key

提问人:sorosh_sabz 提问时间:5/10/2019 最后编辑:Peter Mortensensorosh_sabz 更新时间:10/16/2021 访问量:470

问:

我使用SQLite ORM库在我的程序中使用SQLite,我有如下表:

auto storage = make_storage("test_remove.sqlite",
                            make_table("objects",
                                       make_column("key_part_1",
                                                   &Object::key_part_1),
                                       make_column("key_part_2",
                                                   &Object::key_part_2),
                                       make_column("name",
                                                   &Object::name),
                                       primary_key(&Object::key_part_1, &Object::key_part_2)));

正如你所看到的,这个表有一个复合键(和)。当我从下面创建一个实例时,key_part_1key_part_2Object

Object object{0, 0, "dummy"};

并尝试插入表格

auto id1 = storage.insert(object);

我得到一个例外。

如何将对象插入到此表中?

C++ SQLite ORM

评论


答:

1赞 sorosh_sabz 6/6/2019 #1

正如您在 GitHub for SQLite ORM 中的一个问题中看到的那样,具有复合键的项目将方法命名为方法,要插入具有复合键的对象,您必须使用该函数而不是如下所示的函数。replaceinsert

假设您有一个如下所示的实体

struct Object
{
    int key_part_1;
    int key_part_2;
    std::string name;
};

并创建一个如下所示的架构:


auto storage = make_storage("test_remove.sqlite",
                            make_table("objects",
                                  make_column("key_part_1",
                                               &Object::key_part_1),
                                  make_column("key_part_2",
                                               &Object::key_part_2),
                                  make_column("name",
                                               &Object::name),
                                  primary_key(&Object::key_part_1, &Object::key_part_2)));

因此,您可以插入此实体的一个实例,如下所示:

Object object{0, 0, "Skillet"};

storage.replace(object);

评论

0赞 Ram 9/29/2023
我在创建者函数的主体中创建了存储。这已不在当前范围内。如何访问包装相关功能的类中的存储?