我有一个Python脚本,该脚本在MySQL服务器上调用存储的proc,而存储的proc又依次调用了几个存储的proc,这些proc设置了一些日志记录,并生成并运行查询以将数据导出以进行ETL处理。前三个存储过程在包装器内部工作,第一个创建日志条目并设置变量(@LogID),然后第二个设置我需要的临时表,然后第三个使用对temp表的连接来创建一个导出集,有第四个proc根据我在第一个存储的proc中创建的@LogID和我在第三个存储的proc中填充的@exported_rows变量来更新初始日志记录。问题是第四个存储的proc似乎没有被调用,因此日志表没有使用结束时间和导出的行数进行更新。如果我通过CLI或SequelPro或Workbench运行此程序,则效果很好。当我通过python脚本运行它时,日志没有更新。这是正在发生的代码明智的一部分。...
sql = "call export_table('databaseName','tableName',Version )"
df = pd.read_sql(sql=sql, con=engine).to_csv(filePath + "/" + file, index=False, quoting=csv.QUOTE_NONE, escapechar="\\")
然后,存储的proc会进行以下四个调用:
call _export_log_begin('X',inDatabase,inTable,inVersion,inUpdatedAt);
call _create_temp_column_table(inDatabase,inTable,inVersion);
call _export_data(inDatabase,inTable,inVersion,InUpdatedAt);
call _export_log_end(@logId,@exportedRows);
就像我上面提到的,直接调用时效果很好。
我认为在第三个调用返回结果集之后,熊猫必须关闭/终止连接。