Python pymssql insert error -
my table has 24 columns around half of column in table of float datatype. specified 24 filed, have truncated insert statement here.
csv_data = csv.reader(file('filename.csv')) row in csv_data: cursor.execute('insert 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)) error:
file "pymssql.pyx", line 467, in pymssql.cursor.execute (pymssql.c:7561) pymssql.operationalerror: (8114, 'error converting data type varchar float.db-lib error message 20018, severity 16:\ngeneral sql server error: check messages sql server\n') im having same code on script running fine without issues.
output of "select column_name, data_type information_schema.columns table_name='ddreplication' order ordinal_position"
[(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_encryption', u'nvarchar'), (u'replication_propagate_retention_lock', u'nvarchar'), (u'local_fs_status', u'nvarchar'), (u'connection', u'nvarchar'), (u'state', u'nvarchar'), (u'error', u'nvarchar'), (u'network_bytes_to_destination', u'float'), (u'precomp_bytes_written_to_source', u'float'), (u'precomp_bytes_sent_to_destination', u'float'), (u'bytes_after_synthetic_optimization', u'float'), (u'bytes_after_filtering_by_destination', u'float'), (u'bytes_after_low_bandwidth_optimization', u'float'), (u'bytes_after_local_comp', u'float'), (u'precomp_bytes_remaining', u'float'), (u'compression_ration', u'float'), (u'synced_as_of_time', u'nvarchar'), (u'current_throttle', u'nvarchar'), (u'max_repl_streams', u'nvarchar')]
below function helped me find out errors on original data. give me details such data type of each of value i'm trying insert , count of values getting passed insert statement. managed override , data inserted db, excluding problem record.
now i'm working on fixing problem record , db.
def is_float(s): try: if s none: return false f = float(s) return true except valueerror: return false
print (len(row)) i,v in enumerate(row): print(i, is_float(v),row[i])
Comments
Post a Comment