【发布时间】:2019-04-14 10:14:48
【问题描述】:
在我们的一个 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}).
那么如何从以上两个列表Columns和Rows创建credentials记录列表。有什么想法吗?
编辑
我们不能使用list_to_tuple 函数,因为Rows 列表中的元素数量可能比credentials 不同
【问题讨论】:
-
您不能在运行时创建记录,它们是在编译时创建的。改用地图。
-
如果你有记录定义
credentials,那么列列表是无关紧要的,所以你的问题问得不好。 -
@7stud 我希望你没有得到我的问题。无论如何,我已经以我的方式解决了它,并且工作正常。
-
@Neel:如果你解决了,请在这里发布答案让其他人知道。