2017-03-07 41 views
0

DataframeをOracleテーブルにエクスポートしようとしていて、エラーが発生し続けています。私のコマンドを実行するためにTypeErrorをバイパスできますか?

TypeError: expecting string or bytes object

私が持っているものをエクスポートするために、このエラーを無視または回避できるようにしたいと思います。それは可能ですか?

ここでは、問題の全体を詳細に説明するリンク先:Python - TypeError: expecting string or bytes objectです。私のデータは正直なところ完璧に表示されています。一貫して正しい数の列と行です。データ型はすべて同じです。これまでに何百ものデータフレームをエクスポートするのにこの正確なメソッドを使用しました。私がこれまで持っていたものを輸出するために、エラーメッセージ。

また、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.

は、だから私はcursor.executemany(sql_query, exported_data, batcherrors=True)として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'を' tuple'の代わりに 'str'にしようとしましたが、それでも失敗しました。' NaN'を0に置き換えました。Dataframeのすべての値を文字列に変更しました。テーブルへのエクスポートは、単純な1単語のエクスポートなどで動作します。しかし、私はまだ私を保持しているエラーを回避しても、エクスポートを許可していないと思います。 – theprowler

+1

あなたのexpecationsに関する答えにいくつかの情報を追加します。 –

+0

しかし根本的な問題を解決することについての考えはありませんか? – theprowler

関連する問題