2017-03-07 83 views
0

我试图导出一个数据帧到一个Oracle表,并继续运行到错误我可以绕过TypeError来执行我的命令吗?

TypeError: expecting string or bytes object

我想能够忽略或绕过此错误,以导出我有。那可能吗?

下面是我详细解释我的问题的详细信息的链接:Python - TypeError: expecting string or bytes object。我的数据实际上看起来很完美,它始终是正确的列数和行数,它们都是相同的数据类型,我已经使用这种确切的方法导出了数百个其他Dataframes,并且我想要绕过错误消息为了导出我到目前为止。

此外,因为它在cursor.executemany(行失败,我决定研究该命令。以下是cx_Oracle的文档:http://cx-oracle.readthedocs.io/en/latest/cursor.html。它指出:

When true, the batcherrors parameter enables batch error support within Oracle and ensures that the call succeeds even if an exception takes place in one or more of the sequence of parameters.

所以我将它设置为true cursor.executemany(sql_query, exported_data, 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() 

这里是exported_data打印输出:

[('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, 'HADDOCK GOM,', '2013', '4', '16'), (0, 0, 0, 0, 'YELLOWTAIL GOM, OR', '2013', '4', '16'), (0, 0, 0, 0, 'WITCH - OFFERS', '2013', '4', '16'), ('FY13 QUOTA – TO BUY', 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'), ('4/9/13', 130012, 'COD GBW', 'UP TO 100,000', 0.3, '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, 'WINTER GB', 'ANY', 'OFFERS', '2013', '4', '16'), ('4/9/13', 130013, 'WINTER SNE', 'UP TO 100,000', 0.3, '2013', '4', '16'), ('3/26/13', 130010, 'WINTER SNE', 'ANY', 'OFFERS', '2013', '4', '16'), ('3/26/13', 130008, 'YELLOWTAIL GB', 'ANY', 'OFFERS', '2013', '4', '16'), ('3/26/13', 130011, 'YELLOWTAIL GOM', 'ANY', 'TRADE FOR GB STOCKS -\nOFFERS', '2013', '4', '16'), (1, 0, 0, 0, 0, '2013', '4', '16')]

我真的想解决这个,因为我一直停留在它的帮助一个多星期了。谢谢。

+0

请将相关代码片段添加到此问题中,而不是引用您的其他问题。 –

回答

1

Error or exception handling in Python is done by using try-except blocks

try: 
    cursor.executemany(sql_query, exported_data) 
except TypeError: 
    pass # put your error handling code here, pass will ignore the error 

要用于错误处理做的是给你。默认的Python行为是raise错误(因此你看到它)。当遇到错误时,执行过程中停止,并执行您定义的错误处理例程。忽略错误将而不是使方法cursor.executemany拿起它停止的地方,而是根本不处理该错误。您可以在那里再次调用该方法(使用相同的参数),但这显然无济于事,因为它会再次产生相同的错误。

+0

你确实回答了我的问题,但导出仍然失败。相信我,我已经把它分解成了我能做到的最小,最具体的部分,而且我也弄不清楚。我尝试使'exported_data'成为'str'而不是'tuple',它仍然失败,我用0代替了'NaN',我已经将Dataframe中的所有值更改为字符串,我已经确认导出到表格以简单的单词输出等等工作。但我想即使绕过了阻止我的错误仍然不允许导出 – theprowler

+1

我会添加一些关于您的期望的答案的更多信息。 –

+0

但是没有解决底层问题的想法? – theprowler

相关问题