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