在 python 代码中使用 "Export" 命令时出错

Error while using "Export" command in python code

我使用下面的 python 代码将 table 数据从我的本地服务器导出到 DB2 中的所需文件夹

import os 
import ibm_db_dbi
conn = ibm_db_dbi.connect('sandy','USER','qwerty')
cursor = conn.cursor()
table_name_list = ['employee','staff','department'] #contains list of table name
for table_name in  table_name_list:
   print(table_name)
   path = os.path.join(r"C:\DB2\UPLOAD_DATA", table_name)
   print(path)
   SQL = "export to " + path + "\" + table_name +".csv of del select * from  "+ table_name
   print(SQL) 
   cursor.execute(SQL)

但是当我尝试执行上面的代码时出现错误,

employee
C:\DB2\UPLOAD_DATA\employee
export to C:\DB2\UPLOAD_DATA\employee\employee.csv of del select * from  employee
ibm_db_dbi.ProgrammingError: ibm_db_dbi::ProgrammingError: Statement Execute Failed: [IBM][CLI Driver][DB2/NT64] SQL0007N  The statement was not processed because a character that is not supported in SQL statements was included in the SQL statement.  Invalid character: "\".  Text preceding the invalid character: "export to C:".  SQLSTATE=42601\r SQLCODE=-7

谁能帮我解决这个错误

您收到此错误是因为您的代码不正确,如果您进行更多搜索,您可能会找到它。

EXPORT 是一个命令,它不是 SQL,因此您不能使用 execute() 方法,因为它只需要 SQL。通常,您在 shell 脚本或 Db2 命令处理器的 CLP 脚本中使用此类命令,后者允许您在一个脚本中混合 SQL 语句和命令 - 但不是 python.

要解决此问题,您可以改为调用存储过程(仅当您的 Db2 服务器平台为 Linux/Unix/Windows 时)。您不能在 Db2 的共享云实例上使用它。

要调用存储过程,可以使用python callproc()方法,存储过程的名字是sysproc.admin_cmd,给这个过程一个命令行就是导出命令。文档是 here.

您的帐户需要适当的授权才能 运行 此存储过程,最重要的是要了解文件名(对于您导出的内容)只能 相对于安装在 Db2-server 上的文件系统,换句话说,您不能写入客户端文件系统。因此,如果您的客户端和 Db2 服务器位于不同的主机名上,您必须使用另一种技术从客户端访问导出的数据文件(同样可以通过适当的挂载或复制文件等方式实现)。

如果您的 Db2-server 运行s Linux/Unix/Windows 是最新版本,那么它还可以让您插入到 external table 中,它可以是位于任何可寻址位置的平面文件来自 Db2 服务器。对于某些用例,这可以作为导出的替代方法。