writed_data = np.array(test_data) # dataframe转换array writed_data = writed_data.tolist() # array转换list sql = 'insert into RESULT_TABLE(c1,c2,c3,c4,c5) values(:1,:2,:3,:4,:5)' cur = conn.cursor() cur.executemany(sql, writed_data) # 批量执行query_sql # 记得需要commit然后关闭 cur.close() conn.commit() conn.close()上述代码前置条件:
- test_data为dataframe。
- RESULT_TABLE是数据库中的空表,需要和写入的dataframe的字段名和格式一致。
- conn是Oracle数据库的连接
- c1,c2,c3,c4,c5是dataframe的列名。
可以成功批量写入到指定的表。
进一步优化因为当dataframe的列名变多之后,重复性的工作增加,所以从这个方面进行优化。
def py_insert_oracle(columns,save_table_name):
"""
Args:
columns: 以列表的形式
save_table_name: 保存table的名字
Returns:直接的insert到Oracle的sql语句,字符串格式
"""
s = ''
for i in range(len(columns)):
s = s + columns[i] + '-'
sql_columns = s.replace('-',',')[:-1] # 不要最后输出的逗号
sql_number_str = ''
for i in range(1,len(columns)+1,1):
sql_number_str = sql_number_str + ':' + str(i) + ',' # ':1,:2,:3,:4,:5,:6'
sql_number_str = sql_number_str[:-1]
query_sql = 'insert into ' + save_table_name + '(' + sql_columns + ') values(' + sql_number_str + ') '
return query_sql
上述代码表可以自动实现sql的自动化生成,原理也就是简单的字符串拼接替换,大家想要了解更详细的化,把函数拆开,多打印点出来就可以了。
直接调用的话可以参考下面的参数输入。
columns = test_data.columns.tolist() # 获得dataframe的列名 query_sql = py_insert_oracle(columns, save_table_name = 'RESULT_TABLE') # --------------------------------- # 写入oracle,执行query_sql并关闭 # --------------------------------- writed_data = np.array(test_data) writed_data = writed_data.tolist() cur = conn.cursor() cur.executemany(query_sql, writed_data) # 批量执行query_sql cur.close() conn.commit() conn.close()



