数据库实操——pandas写入数据库数据

1、Mysql

(1)插入数据

因为pymysql不识别除%s之外的其他字符,例如%d,%f,因此,将sql语句的values全部设置为%s

def insertdata(data,table_name,connect):

    c_name = str(data.columns.tolist()).replace("'","").replace("[",'').replace("]",'').replace(" ","")
    c_type = str(['%s' for i in range(len(data.columns.tolist()))]).replace("'","").replace("[",'').replace("]",'').replace(" ","")

    data = [tuple(data.iloc[i]) for i in range(data.shape[0])]
    sql =  "insert into "+str(table_name)+"("+str(c_name)+") Values("+str(c_type)+");"

    cursor = connect.cursor()
    try:
        cursor.executemany(sql, data)
    except Exception as e:
        print("执行MySQL: %s 时出错:%s" % (sql, e))
        connect.rollback
    finally:
        cursor.close()
        connect.commit()
        connect.close()

t = pd.DataFrame([[1,2],[3.0,4.0]] ,columns=['t1','t2']) 
#connect是连接数据库信息
insertdata(t,'test',connect)

2、Oracle

(1)插入数据

def insert_multiple(table_name, data, conn_db):
    """multiple insert
       parameters:
       *) table_name : table_name to load
       *) df : dataframe to load
       *) conn_db : a connection object from cx_oracle or open_connection
       *) batch_size : batch size of commit
    """
    cur = conn_db.cursor()
    sql = "INSERT INTO {0} ({1}) VALUES (:{2})".format(table_name,
                                                      ', '.join(data.columns),
                                                    ', :'.join(list(map(str,range(1, len(data.columns)+1)))))
#    print(sql) 
    rows = []
    for x in data.values:
        rows.append([None if pd.isnull(y) else y for y in x])
    cur.executemany(sql,rows)   
    conn_db.commit()
    conn_db.close()

你可能感兴趣的:(Python,mysql,数据库)