首页 > 解决方案 > Bcp 命令进入 Microsoft Azure

问题描述

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

当我直接从命令行导出 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 没有变化。

标签: pythonpandasazurecsvbcp

解决方案


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

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

有关详细信息,请参阅使用本机格式导入或导出数据 (SQL Server)

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

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

有关详细信息,请参阅使用字符格式导入或导出数据 (SQL Server)

因此,如果要导入从 pandas 数据帧导出的 csv 数据文件,正确的方法是使用-c而不是-n,那么它适用于在 SQL 数据库上通过 bcp 导入和导出 CSV 格式的数据文件。


推荐阅读