db2 在python代码中使用“导出”命令时出错

b4wnujal  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(296)

我使用下面的python代码将表数据从本地服务器导出到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

有人,请帮我解决这个错误

bq3bfh9z

bq3bfh9z1#

您得到这个错误是因为您的代码不正确,如果您搜索更多,您可能已经发现了这个错误。
EXPORT是一个命令,它不是SQL,因此你不能使用execute()方法,因为它只需要SQL。通常你在shell脚本中使用这样的命令,或者在Db2命令处理器的CLP脚本中使用这样的命令,它允许你在一个脚本中混合SQL语句和命令--而不是python。
要解决此问题,您可以改为调用存储过程(仅当Db2服务器平台为Linux/Unix/Windows时)。您不能在Db2的共享云示例上使用此方法。
要调用一个存储过程,可以使用python callproc()方法,存储过程的名称为sysproc.admin_cmd,并为该过程提供一个命令行,即EXPORT命令,文档为here
您的帐户需要适当的授权才能运行此存储过程,最重要的是要了解文件名(对于您导出的内容)只能 * 相对于Db2-server上挂载的文件系统 *,换句话说,您无法写入客户端文件系统。因此,如果您的客户端和Db2-server位于不同的主机名上,您必须使用另一种技术从客户端访问导出的数据文件(同样可以通过适当的挂载或复制文件等方式)。
如果您的Db2-server执行Linux/Unix/Windows,而且是最新版本,则您也可以将它插入external table,它可以是位于Db2-server可定址之任何位置的一般档案。在某些使用案例中,这可以是汇出的替代方式。

相关问题