julia - 如何在 Julia 中使用 LibPQ 插入记录?
问题描述
目标:在 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.language 已创建,但未插入记录。
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
请指导解决上述问题!
解决方案
怎么用LibPQ.load!
LibPQ.load!(
(lang = langs.langv , web = langs.webv),
conn,
"INSERT INTO practice.language (lang, web) VALUES(\$1, \$2));"
)
永远记住提交(取决于您的配置,tocommit 可能会关闭)。
execute(conn, "COMMIT;")
推荐阅读
- node.js - 在 mongodb 中上传图像时出现错误无法读取未定义的属性“缓冲区”
- python - 有没有其他方法可以写这些?
- swiftui - 不能对不可变值使用变异 getter:'self' 是不可变的
- razor - 是否可以在 DNN 皮肤中加载特定的 2sxc 模块?
- php - 如何在 Mac 上卸载 XAMPP?
- wso2 - 进入内部 jdbc 用户存储 wso2 5.10.0 Pirmary 的配置文件时出错,具有辅助 Active Directory 存储
- javascript - 将 audioContext 转换回 Buffers
- angular - 如何使用 Angular 在 Heroku 上运行预渲染文件夹
- android - 从字符串中获取图像源并在recyclerview中显示它们?
- c# - 解析 JSON 并应用过滤器