1.先看数据库查询数据展示的效果:
直接通过pandas写入到excel表显示变为科学计数法:
2.我们想通过pandas将数据库查询结果写入到一个excel表或csv文件中,其展示效果跟数据库展示须一致
3.查询语句代码如下:
def sql_query(num, sql):
db = pymysql.connect(host=host, database=database, user=user, password=password, port=port)
cursor = db.cursor()
cursor.execute(sql)
if num == 1:
data = cursor.description
else:
data = cursor.fetchall()
cursor.close()
db.close()
return data
if __name__ == "__main__":
sql = "select * from ztc_online_sales_customer limit 10"
#传参数1,代表获取数据库所有的字段名存放到一个列表a中
a = [i[0] for i in sql_query(1, sql)]
#传参数2代表sql查询结果
data = sql_query(2, sql)
#通过sql返回的查询结果dat是一个二元元组(即元组嵌套元组),通过for循环取出每一个元组用list()将其转换为列表,在通过zip()函数将列表a和列表list(i)合并后再次通过list()函数转换,形成一个元组列表,然后用dict()函数和列表生成式形成一个字典列表result
result = [dict(list(zip(a, list(i)))) for i in data]
df = pd.DataFrame(result )
#由于我们id和order_id在数据库中是类型是整形数据,长度过长,写入到excel表将会自动被转换为科学计数法显示。
#解决办法:将转化为科学计数法的2列数据id和order_id转为字符串str,可解决此问题。代码如下
df["id"] = df['id'].astype(str)
df["order_id"] = df["order_id"].astype(str)
df.to_excel(r"C:Users陌上玉Desktop资料 02.xlsx")
4.最后excel表展示的查询结果跟数据库保持一致:



