如何解决Julia数据框到数据库ODBC,不是很慢的解决方案
我想使用ODBC.jl在表中插入一个数据框,该表已经存在,并且看来我无法与其一起使用函数ODBC.load(即使带有append = true)。 通常,我通过将数据帧加载为csv来插入带有copyIn的数据帧,但是仅使用ODBC似乎无法做到这一点。
我发现的最后一件事是:
stmt = ODBC.prepare(dsn,"INSERT INTO cool_table VALUES(?,?,?)")
for row = 1:size(df,1)
ODBC.execute!(stmt,[df[row,x] for x = 1:size(df,2)])
end
但这是一行一行的,插入所有内容都非常长。
我也尝试过自己这样做:
_prepare_field(x::Any) = x
_prepare_field(x::Missing) = ""
_prepare_field(x::AbstractString) = string(''',x,''')
row_names = join(string.(Tables.columnnames(table)),",")
row_strings = imap(Tables.eachrow(table)) do row
join((_prepare_field(x) for x in row),") * "\n"
end
query = "INSERT INTO $tableName($row_names) VALUES $row_strings"
@debug "Inserting $(nrow(df)) in $tableName)"
DBInterface.execute(db.conn,query)
但是由于某些“,”而导致我出错,例如col 9232123的位置不正确 我找不到这是因为我的行太多了,我猜想是_prepare_field不能涵盖所有可能的字符串转义,但是我找不到其他方法。
我错过了什么吗,有更简单的方法吗?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。