pandas的dataframe批量保存到Oracle数据库

目标将dataframe批量写入到Oracle数据库

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()

你可能感兴趣的:(数据库,数据库,oracle,sql,python)