python - 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 没有变化。
解决方案
您的 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 格式的数据文件。
推荐阅读
- python-3.x - 找不到python nmap模块
- java - 您如何在控制器中处理同一页面上的两个表单以执行不同的任务和端点?if语句的格式是什么?
- react-native - 如何从 ListItem (react-native-elements) 导航到新屏幕?
- python - 如何制作跟随鼠标光标的绘图工具?
- python - 使用元类跟踪python中的实例
- c - 未定义对“WinMain@16”mingw 的引用转换为 DLL
- constants - 在 eslint 中禁用骆驼案例规则检查
- node.js - 谷歌云功能永远运行
- python - ANN模型收敛但lstm没有
- javascript - 滚动到那里时,Aos.js 不显示元素