如何修改Elixir脚本中Mariaex.Result的num_rows判断条件?
解决Mariaex.Result中num_rows的判断问题
你的问题核心是没正确处理Mariaex查询返回的结果元组,而且原代码的if条件写法在Elixir里完全起不到预期作用——你直接把{:ok, %Mariaex.Result{num_rows: nil}}当成判断表达式,但Elixir里除了nil和false,所有值都会被视为true,所以这个条件永远成立,else分支根本不会执行。
要实现判断num_rows是否为0的目标,得用Elixir的模式匹配来处理查询结果(Mariaex查询只会返回{:ok, result_struct}或{:error, reason}两种格式),推荐用case语句来做匹配,能覆盖所有可能的场景:
# 先执行查询获取结果 query_result = Mariaex.query(你的连接对象, "你的SQL查询语句", []) # 用case匹配结果分支 case query_result do {:ok, %Mariaex.Result{num_rows: 0}} -> IO.puts "查询成功但未返回任何数据" {:ok, %Mariaex.Result{num_rows: row_count}} -> IO.puts "查询成功,返回了 #{row_count} 条数据" {:error, error_reason} -> IO.puts "查询失败:#{inspect(error_reason)}" end
如果想把查询和判断写在一起,也可以直接把Mariaex.query放进case里:
case Mariaex.query(你的连接对象, "你的SQL查询语句", []) do {:ok, %Mariaex.Result{num_rows: 0}} -> IO.puts "查询成功但无返回数据" {:ok, %Mariaex.Result{num_rows: _}} -> IO.puts "查询成功" {:error, _} -> IO.puts "查询失败" end
核心逻辑很清晰:
- 先匹配查询是否成功(区分
{:ok, ...}和{:error, ...}) - 在成功分支里,再匹配
num_rows是否为0,以此区分不同结果情况
这种写法既符合Elixir的函数式风格,也能精准覆盖所有可能的查询结果。
内容的提问来源于stack exchange,提问作者Sh4dy
相关产品推荐
相关产品推荐

