如何在Julia中使用LibPQ插入记录?

AVA

目标:使用Julia中的LibPQ创建记录并将其插入Postgres

码:

using LibPQ, DataStreams, DataFrames;
host="localhost";
port="5432";
db="practice";
user="pdm";
pwd="pdm123";
ddq = "DROP TABLE IF EXISTS practice.language; CREATE TABLE IF NOT EXISTS practice.language (lang TEXT, web TEXT)";
conn = LibPQ.Connection("host=$host dbname=$db user=$user password=$pwd");
result = execute(conn, ddq);
langs = DataFrame(langv=["Julia","Go","Rust"], webv=["julialang.org", "golang.org", "www.rust-lang.org"]);
dmq = "INSERT INTO practice.language (lang, web) VALUES(\$1, \$2))";
Data.stream!(langs, LibPQ.Statement, conn, dmq);
close(conn);

观察:

表习俗。语言已创建,但未插入记录。

practice=> select * from practice.language;
 lang | web 
------+-----
(0 rows)

错误日志:

ERROR: LoadError: MethodError: no method matching schema(::DataFrame)
Closest candidates are:
  schema(::S, ::DataStreams.Data.Query{c,columns,e,limit,offset}) where {c, S, columns, e, limit, offset} at /opt/julia/julia-1.1.0/share/julia/stdlib/v1.1/packages/DataStreams/mEqAy/src/query.jl:217
  schema(::S, ::DataStreams.Data.Query{c,columns,e,limit,offset}, ::Any) where {c, S, columns, e, limit, offset} at /opt/julia/julia-1.1.0/share/julia/stdlib/v1.1/packages/DataStreams/mEqAy/src/query.jl:217
  schema(::Array{NamedTuple{names,T},1}) where {names, T} at /opt/julia/julia-1.1.0/share/julia/stdlib/v1.1/packages/DataStreams/mEqAy/src/namedtuples.jl:26
  ...
Stacktrace:
 [1] #stream!#111(::Bool, ::Dict{Int64,Function}, ::Function, ::Array{Any,1}, ::Array{Any,1}, ::Nothing, ::Nothing, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(DataStreams.Data.stream!), ::DataFrame, ::Type{LibPQ.Statement}, ::LibPQ.Connection, ::Vararg{Any,N} where N) at /opt/julia/julia-1.1.0/share/julia/stdlib/v1.1/packages/DataStreams/mEqAy/src/query.jl:534
 [2] stream!(::DataFrame, ::Type{LibPQ.Statement}, ::LibPQ.Connection, ::String) at /opt/julia/julia-1.1.0/share/julia/stdlib/v1.1/packages/DataStreams/mEqAy/src/query.jl:516
 [3] top-level scope at none:0
 [4] include at ./boot.jl:326 [inlined]
 [5] include_relative(::Module, ::String) at ./loading.jl:1038
 [6] include(::Module, ::String) at ./sysimg.jl:29
 [7] include(::String) at ./client.jl:403
 [8] top-level scope at none:0
in expression starting at /root/pgtest.jl:12

请指导解决以上问题!

Przemyslaw Szufel

那使用呢 LibPQ.load!

LibPQ.load!(
    (lang = langs.langv , web = langs.webv),
    conn,
    "INSERT INTO practice.language (lang, web) VALUES(\$1, \$2));"
)

始终记住要提交(取决于您的配置atocommit可能已关闭)。

execute(conn, "COMMIT;")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章