Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
Pandas是python中基于numpy和matplotlib的第三方数据分析库,与后两者共同构成了python数据分析的基础工具包,享有数分三剑客之名。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。
Pandas还拥有便捷的数据读写操作,相比于numpy仅支持数字索引,pandas的两种数据结构均支持标签索引,包括bool索引也是支持的
在使用pandas读取和写入数据库的时候,最好不要用pymssql直接去连服务器,读取数据可能不会出问题,但是在写入的时候,会出现一系列的问题。推荐使用sqlalchemy库
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()