You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

核心逻辑很清晰:

  1. 先匹配查询是否成功(区分{:ok, ...}和{:error, ...})
  2. 在成功分支里,再匹配num_rows是否为0,以此区分不同结果情况

这种写法既符合Elixir的函数式风格,也能精准覆盖所有可能的查询结果。

内容的提问来源于stack exchange,提问作者Sh4dy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:22:11