How do I insert text into MySQL with Julia?

Viewed 186

I'm struggling to get text from an input file into MySQL with Julia.

Using this code:

using CSV
using MySQL

conn = DBInterface.connect(MySQL.Connection, "localhost", "root", "abcdefgh", db="nba")

create_games_table = "CREATE TABLE IF NOT EXISTS games(
        home_team VARCHAR(20)
        );"

DBInterface.execute(conn, create_games_table)

insert_into_games = DBInterface.prepare(conn, "INSERT INTO games VALUES(?)")

file_name = "C:/Myfilename.txt"

csv_reader = CSV.File(file_name; header=[:Date, :Home, :H_pts], delim="\t", dateformat="e u d yyyy")

for row in csv_reader
        @show typeof(row.Home)
        DBInterface.execute(insert_into_games, [row.Home])
end

I get this output:

typeof(row.Home) = String15
ERROR: MethodError: no method matching bind!(::MySQL.API.BindHelper, ::Vector{MySQL.API.MYSQL_BIND}, ::Int64, ::String15)
Closest candidates are:
  bind!(::Any, ::Any, ::Any, ::Missing) at C:\Users\Graham\.julia\packages\MySQL\EgAUf\src\prepare.jl:313
  bind!(::Any, ::Any, ::Any, ::Dates.TimeType) at C:\Users\Graham\.julia\packages\MySQL\EgAUf\src\prepare.jl:334
  bind!(::Any, ::Any, ::Any, ::Union{MySQL.API.Bit, String, DecFP.DecimalFloatingPoint, Vector{UInt8}}) at C:\Users\User\.julia\packages\MySQL\EgAUf\src\prepare.jl:357
  ...
Stacktrace:
 [1] (::MySQL.var"#36#43"{MySQL.Statement, Vector{String15}})(i::Int64)

It seems to be expecting Int input, and sure enough if I change the file input and db columns to Int, it works. But why is it expecting Int input when I'm trying to populate a text field?

1 Answers

The feature request suggested by Frames Catherine White should now be implemented in the latest release of MySQL.jl. This problem should no longer be an issue.

Related