从两个单独的列表创建erlang记录

wecizke3  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(385)

在我们的一个erlang项目中,我们使用mysql otp从mysql数据库加载数据,如下所示-

{ok, Columns, Rows} = mysql:query(ConnectionPid, <<"SELECT * FROM credentials WHERE username = ?">>, [Username])

现在 Columns 是由所有列名和 Rows 是记录列表。
例如。

Columns = [<<"id">>, <<"username">>, <<"password">>, <<"is_active">>]
Rows = [[1,"test_user_1", "password", 'Y'], [2, "test_user_2", "password", 'Y']]

现在我们要在加载时将mysql记录缓存到ets表中。所以我们需要从上面两个列表中创建记录。
例如,我们有以下声明

-record(credentials, {id, username, password, is_active}).

那么如何创建 credentials 从以上两个列表中记录 Columns 以及 Rows . 你知道吗?
编辑
我们不能使用 list_to_tuple 函数,因为在 Rows 列表比 credentials

thigvfpy

thigvfpy1#

如果你的数据 Rows 是一致的 [Id,Username,Password,IsActive|_] 可以总是被期望是有序的和其他额外的价值观将尾随他们,你将不需要 Columns 正如@7stud在帖子评论中提到的。
下面是我如何理解列表:

Creds = [ #credentials{
                 id=Id,
                 username=Usr,
                 password=Pw,
                 is_active=Act} || [Id,Usr,Pw,Act|_] <- Rows ]

这个 _ 意味着我们忽略了任何不适合的额外值 credentials 的形状。

相关问题