我使用下面的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
有人,请帮我解决这个错误
1条答案
按热度按时间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可定址之任何位置的一般档案。在某些使用案例中,这可以是汇出的替代方式。