【问题标题】:Seeding the Database from a CSV file in Phoenix/Elixir从 Phoenix/Elixir 中的 CSV 文件播种数据库
【发布时间】:2021-06-15 13:54:15
【问题描述】:

当我尝试运行:mix run priv/repo/seeds.exs 时,我遇到了问题:(FunctionClauseError) no function clause matching in anonymous fn/1 in :elixir_compiler_1.__FILE__/1 The following arguments were given to anonymous fn/1 in :elixir_compiler_1.__FILE__/1:

这是我的seeds.exs 文件:

alias FlightsList.Repo
alias FlightsList.Management.Flights

File.stream!("C:/Users/vukap/phx_projects/flights_list/priv/repo/flights.csv")
|> Stream.drop(1)
|> CSV.decode(headers: [:Id, :Origin, :Destination, :DepartureDate, :DepartureTime, :ArrivalDate, :ArrivalTime, :Number])
|> Enum.each(fn {:ok, map} ->
  Flights.changeset(
    %Flights{},
    %{Id: String.to_integer(map[:Id]), Origin: map[:Origin], Destination: map[:Destination], DepartureDate: String.to_integer(map[:DepartureDate]), DepartureTime: String.to_integer(map[:DepartureTime]), ArrivalDate: String.to_integer(map[:ArrivalDate]), ArrivalTime: String.to_integer(map[:ArrivalTime]), Number: map[:Number]})
  |> Repo.insert!()
end)

我该如何解决?

【问题讨论】:

    标签: csv elixir phoenix


    【解决方案1】:

    在您指定您使用的CSV 库之前,不可能准确回答,或者至少在将以下参数提供给匿名 fn/1 之后错误实际说明了什么,但问题是CSV.decode/2 肯定会返回与您的下一个子句期望的 {:ok, map} 不同的东西。

    要解决此问题和类似问题,可以将 catch-all 子句添加到处理中并检查结果。

    ...
    |> Enum.each(fn
      {:ok, map} -> Flights.changeset(...)
      other -> IO.inspect(other, label: "Unexpected")
    end)
    

    检查上面会打印出的内容并相应地修复它。

    【讨论】:

      【解决方案2】:

      我猜你在CSV.decode 函数中遗漏了一个separator,这是我如何做到这一点的示例,你可以在种子文件中调用stream_csv

        def store_it(row) do
          {:ok, result} = row
      
          %Segments{
            id: result.id,
            name: result.name
          } |> Repo.insert!
        end
      
        def stream_csv do
          Path.expand("~/Project/segmments.csv")
          |> File.stream!
          |> CSV.decode(separator: ?;, headers: [:id, :name])
          |> Enum.each(&store_it/1)
        end
      

      【讨论】:

        猜你喜欢
        • 2017-12-16
        • 2017-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 1970-01-01
        • 2014-07-18
        相关资源
        最近更新 更多