【问题标题】:Bcp command into Microsoft AzureBcp 命令进入 Microsoft Azure
【发布时间】:2019-04-24 11:35:50
【问题描述】:

我正在尝试使用bcp command 将数据附加到azure db 中的现有表中。

当我直接从命令行导出 csv\txt 文件时 - 它看起来像一个二进制文件,然后从这个文件导入就可以了。

但是,如果我尝试获取具有相同数据的python pandas dataframe 并将其保存为 csv\txt,则内容不同 - 没有二进制数据 - 只是正常值。

但是,从该文件导入后 - 没有错误,但导入了 0 行...

如何从与 bcp csv 相同的数据帧创建 csv?

这是我的工作代码(直接来自命令行):

--export
bcp "select * from tbl where val=1" queryout "Test\tbl1.csv" -S <server> -d <db> -U <user> -P <password> -q -n -t,

--import
bcp tbl2 in "Test\tbl1.csv" -S <server> -d <db> -U <user> -P <password> -q -n -t,

这是我的python代码:

import subprocess as sp
...
df0.to_csv('tm2.csv',encoding='utf8',index=None,sep=',',header=None)

cmd2='bcp tbl2 in "Test\tm2.csv" -S <server> -d <db> -U <user> -P <password> -q -t, -n'

sp.call(cmd2)

但表 tbl2 没有变化。

【问题讨论】:

  • 有人吗?如何像从 bcp 生成一样从 pandas 生成 csv?有什么不同?

标签: python pandas azure csv bcp


【解决方案1】:

您的 bcp 命令行中存在问题。根据bcp Utility的官方文档,-n选项表示使用数据的本机(数据库)数据类型,将数据导出为二进制格式,见下文。

-n 使用数据的本机(数据库)数据类型执行大容量复制操作。此选项不提示每个字段;它用 原生值。

如需了解更多信息,请参阅Use Native Format to Import or Export Data (SQL Server)

但是,在您的场景中,导入/导出 csv 格式的数据文件必须使用-c 选项,请参阅下面的说明。

-c 使用字符数据类型执行操作。此选项不提示每个字段;它使用 char 作为存储类型, 不带前缀并使用 \t(制表符)作为字段分隔符 和 \r\n (换行符)作为行终止符。 -c 不是 与-w兼容。

如需了解更多信息,请参阅Use Character Format to Import or Export Data (SQL Server)

所以如果你想导入从pandas数据框导出的csv数据文件,正确的方法是使用-c而不是-n,那么它适用于通过bcp在SQL数据库上导入和导出CSV格式的数据文件.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多