2017-08-18 17 views
0

私のテーブルには、私のテーブルのカラムの半分の約24カラムに浮動小数点データ型があります。 24項目を指定したので、ここで挿入文を切り捨てました。Python pymssqlの挿入エラー

csv_data = csv.reader(file('filename.csv')) 
for row in csv_data: 
cursor.execute('insert into ddreplication (CTX, Mode,...,Max_repl_streams) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', tuple(row)) 

エラー:

File "pymssql.pyx", line 467, in pymssql.Cursor.execute 
(pymssql.c:7561) 
    pymssql.OperationalError: (8114, 'Error converting data type varchar to float.DB-Lib error message 20018, severity 16:\nGeneral SQL 
Server error: Check messages from the SQL Server\n') 

イム問題なく罰金を実行している別のスクリプトにはほとんど同じコードを有します。

出力

"をORDINAL_POSITION BY TABLE_NAME = 'ddreplication' ORDER INFORMATION_SCHEMA.COLUMNS FROM COLUMN_NAME、DATA_TYPE選択" [(u'CTX 'u'int')、(U 'Mode'、u'nvarchar ')、(u'Destination'、u'nvarchar ')、(u'Connection_Host'、u'nvarchar ')、(u'Enabled'、u'nvarchar ')、(u'Low_bandwidth_optimization 'u'nvarchar')、(u'Replication_encrypt '、u'nvarchar')、(u'Replication_propagate_retention_lock '、u'nvarchar')、(u'Local_fs_status '、u'nvarchar')、 u'nvarchar ')、(u'State'、u'nvarchar ')、(u'Error'、u'nvarchar ')、(u'Network_bytes_to_destination'、u'float ')、(u'P (u'Bytes_after_synthetic_optimization '、u'float')、(u'Bytes_after_filtering_by_destination '、u'float')、(u'Bytes_after_low_bandwidth_optimization '、u'Bytes_after_flowing_by_destination'、u'float ' 、u'FreComp_bytes_remaining '、u'float')、(u'Compression_ration '、u'float')、(u'Synced_as_of_time '、u(' u'Bytes_after_local_comp '、u'float')、 (u'Max_repl_streams '、u'nvarchar')]

+0

tuple(row) 

からクエリパラメータを変更することで、ヌルを挿入するためにNoneで 'N/A' に置き換えることができますか?さらに、CSVの列の順序がINSERT文の列のリストと正確に一致することを確認しましたか? – Arminius

+0

私は自分のデータファイルから2行を付けました。私はCSVの一致の挿入文を列の順序をダブルチェックしました。私はここでスペースのために2行のデータを切り捨てました 19、宛先、mtree://dd9500ausprd​​01.storage。土曜日8月19日02:33:45、正常、エラーなし、324423376,0,0からの、anz/data/col1/oracle-longterm-fromtm、dd9500ausdr01R.storage.anz、yes、 0,0,0,0,0、該当なし、土8月19日02:33、無制限(回復のみ)、32(デフォルト) 20、source、mtree://d234sdfcom1.storage.com/data/col1 /FROMNSDEVMW,....4624454382864,...,3812323071052,0,22.1,Sat Aug 19 02:46、無制限、32(デフォルト) – Raju

+0

質問を編集して 'cursor.execute(" TABLE_NAME = 'ddreplication' ORDER BY ORDINAL_POSITION ");でCOLUMN_NAMEを選択し、INFORMATION_SCHEMA.COLUMNSからDATA_TYPEを削除します。印刷(cursor.fetchall()) ' –

答えて

0

以下の機能は、元のデータのエラーを見つけるのに役立ちました。それは、私が挿入しようとしている値のそれぞれのデータ型や、挿入ステートメントに渡される値の数などの詳細を示します。これで、問題レコードを除いて、データを上書きしてdbに挿入することができました。

私は問題レコードを修正してDBに取り込みます。

デフis_float(S): 試み:SがNoneの場合 :ValueErrorを除き、偽 F =フロート(S) trueを返します を返す :偽

プリントを返す (LEN(行))列挙ではI、V(行)のための : プリント(I、is_float(V)、[i]の行)あなたが発見したとして

0

を、あなたの元データで面倒なラインはのための 'N/A' を含みますfloat列「Compression_ration」、「N/A」はpaできません数値にrsedします。あなたは、サンプルデータを提供することができます

tuple(None if x == 'N/A' else x for x in row)