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.rollbackfinally: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 insertparameters:*) 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()