Python 我可以绕过TypeError来执行命令吗?
我正在尝试将数据帧导出到Oracle表中,并一直遇到错误Python 我可以绕过TypeError来执行命令吗?,python,sql,oracle,pandas,typeerror,Python,Sql,Oracle,Pandas,Typeerror,我正在尝试将数据帧导出到Oracle表中,并一直遇到错误 类型错误:应为字符串或字节对象 我希望能够忽略或绕过这个错误,以便导出我所拥有的。可能吗 这里有一个链接,我将详细解释我的整个问题:。老实说,我的数据看起来很完美,它的列数和行数都是正确的,它们都是相同的数据类型,我以前使用过这种精确的方法导出过数百个其他数据帧,我想绕过错误消息,以便导出到目前为止的数据帧 另外,由于它在游标.executemany(行)上失败,我决定研究该命令。以下是cx\u Oracle的文档。它声明: 如果为tru
类型错误:应为字符串或字节对象
我希望能够忽略或绕过这个错误,以便导出我所拥有的。可能吗
这里有一个链接,我将详细解释我的整个问题:。老实说,我的数据看起来很完美,它的列数和行数都是正确的,它们都是相同的数据类型,我以前使用过这种精确的方法导出过数百个其他数据帧,我想绕过错误消息,以便导出到目前为止的数据帧
另外,由于它在游标.executemany(
行)上失败,我决定研究该命令。以下是cx\u Oracle
的文档。它声明:
如果为true,则batcherrors参数在Oracle中启用批处理错误支持,并确保调用成功,即使一个或多个参数序列中发生异常。
因此,我将其设置为true作为cursor.executemany(sql\u查询,导出的数据,batcherrors=true),但它没有改变任何内容
这是我的相关代码:
df = pd.read_excel(file_path)
df = df.fillna(0)
df = df.ix[1:]
cursor = con.cursor()
exported_data = [tuple(x) for x in df.values]
#exported_data = [str(x) for x in df.values]
#print("exported_data:", exported_data)
sql_query = ("INSERT INTO FISHTABLE(date_posted, stock_id, species, pounds, advertised_price, email_year, email_month, email_day, sector_name, ask)" "VALUES(:1, :2, :3, :4, :5, :6, :7, :8, 'Sustainable Harvest Sector', '1')")
cursor.executemany(sql_query, exported_data)
con.commit() #commit to database
cursor.close()
con.close()
这是导出的数据的打印输出:
[('DATE','TRADE ID','AVAILABLE STOCK','AMOUNT','BUY PRICE','2013','4','16'),('04/02/13','130014','WINTER SNE','12000','TRADE IN RETURN FOR','2013','4','16'),(0,0,0,0,0,0,'HADDOCK GOM','2013','4','16'),(0,0,0,0,0,'WITCH OFFERS','2013','4','16'),('FY13配额–购买',0,0,0,0,'2013','4','16'),('DATE','TRADE ID','DESIRED STOCK','AMOUNT','BUY PRICE','2013','4','16'),('3/26/13','130006','COD GBE','ANY','OFFERS','2013','4','16'),('3/26/13','130007','COD GBW','ANY','OFFERS','2013','4','16'),',('3/26/13',130001',COD GOM',INQUIRE',1.5',2013',4',16'),('3/26/13',130009',冬季GB',任何',报价',2013',4',16'),('4/9/13',130013',冬季SNE',最高100000',0.3',2013',4',16'),('3/26/13',130010',冬季SNE',任何',报价',2013',4',16'),('3/26/13',130008,'YELLOWTAIL GB','ANY','OFFERS','2013','4','16'),('3/26/13',130011,'YELLOWTAIL GOM','ANY','GB股票交易-\nOFFERS','2013','4','16'),(1,0,0,0,'2013','4','16')。
我真的很想帮忙解决这个问题,因为我已经坚持了一个多星期了。谢谢。
如何处理错误取决于您自己。默认的Python行为是引发错误(因此您可以看到它)。当遇到错误时,执行将在该点停止,并执行您定义的错误处理例程。忽略错误将不会使方法成为光标。executemany将在停止的位置拾取,但不会处理错误。您可以在此处再次调用该方法(使用相同的参数),但这显然没有帮助,因为它只会再次产生相同的错误。
如何处理错误取决于您自己。默认的Python行为是引发错误(因此您可以看到它)。当遇到错误时,执行将在该点停止,并执行您定义的错误处理例程。忽略错误将不会使方法成为光标。executemany将在停止的位置拾取,但不会处理错误。您可以在此处再次调用该方法(具有相同的论点),但这显然没有帮助,因为它只会再次产生相同的错误。请将相关代码段添加到此问题,而不是引用其他问题。请将相关代码段添加到此问题,而不是引用其他问题。您确实完美地回答了我的问题,但导出仍然失败s、 相信我,我已经把它分解成了最小和最具体的部分,我可以,但我无法理解。我尝试将
exported_data
astr
而不是tuple
,它仍然失败,我用0替换了NaN
s,我将数据框中的所有值都更改为字符串,我已经确认了export to the table可用于简单的一个单词导出,以及更多。但我想即使绕过阻碍我的错误,也不允许导出。我会在答案中添加更多关于您的导出的信息。但没有考虑解决根本问题?您发布的数据和物种值有时会变得麻木我想你不应该用0
来填空,而应该用emtpy string'
来填空。我真的认为这会解决这个问题,这是一个非常聪明的想法,考虑到错误需要字符串或字节
。但这也没有解决它:(你确实很好地回答了我的问题,但导出仍然失败。相信我,我已经将其分解为最小和最具体的部分,我无法理解。我尝试将导出的数据
astr
而不是元组
,它仍然失败,我用0替换了NaN
s,我更改了将Dataframe中的值转换为字符串,我已经确认导出到表可以使用简单的一个字导出等。但是我想即使绕过阻碍我的错误,仍然不允许导出。我将在回答中添加有关您的体验的更多信息。但是没有考虑解决潜在问题?您的数据_发布的
和物种
值有时是数字,有时是字符串。我想你不应该用0
来填补空白,而应该用emtpy string”
。我真的认为
try:
cursor.executemany(sql_query, exported_data)
except TypeError:
pass # put your error handling code here, pass will ignore the error