我们现有一个excel文件,并想将其导入数据库,并且想从数据库里(或代码组织的数据)将数据导出成excel

导入:

1. 读取excel文件(这里可以写死路径,也可以用相对引用路径)

首先环境中需要有 pandas xlrd xlwt 包,如果没有,使用以下脚本在conda环境中安装

我们主要利用 pandas 的 dataframe 进行数据表操作,xlrd 用于 excel 文件的 读,xlwt 用于 excel 文件的 写

tips: xlrd 这个包最新的 2.0版本不支持读取 xlsx 文件

pip install pandas
pip install xlrd==1.2.0
pip install xlwt==1.3.0

在路径字符串前面 + r 是为了屏蔽转义符导致出现问题 (可以去掉 r 对比试试即可)

import pandas as pd# 以下两种方式均可
df = pd.read_excel('xls/test.xlsx')
# 这种是路径写死的方式
df = pd.read_excel(r'D:\Code_Offline\DBExcel\xls\test.xlsx')
# 查看 df
print(df)

df 包含了 excel 表中的数据

这时候我们可以按行遍历数据,为下一步做准备

首先我们打印查看一下 dataframe 的长度,输出:

print("excel总行数为: ", len(df), "\n")for i in range(len(df)):print(i)

2. 创建与SqlServer的连接 (其他数据库也一样,这里用的SqlServer)

首先需要安装 pymssql 包(SqlServer是 pymssql,mysql 是 pymysql,Oracle... 自己查阅相关资料,只是名字不同,作用一致)

pip install pymssql

同时记得引入 pymssql 包

import pymssql

连接数据库的方法

def conn():# 后续如果出现乱码 请调整此处的 charset 换成utf-8connect = pymssql.connect('.', 'sa', '123', 'DBCenter', charset='GBK')if connect:print("连接成功")return connect

3. 接下来就通过读取的excel向数据库中插入

我们提供两种方式

一种是通过列名寻值

另一种是通过 iloc 找固定行列(推荐)

# 第一种方式
for i in range(len(df)):id = df['ID'].values[i]name = df['NAME'].values[i]height = df['HEIGHT'].values[i]weight = df['WEIGHT'].values[i]strsql = f"INSERT INTO testinfo SELECT {id},'{name}',{height},{weight}"print(strsql)print('1 ↑\n\n2 ↓')# 第二种方式
# 通过 iloc 寻找固定行列值
for i in range(len(df)):id = df.iloc[i][0]name = df.iloc[i][1]height = df.iloc[i][2]weight = df.iloc[i][3]strsql = f"INSERT INTO testinfo SELECT {id},'{name}',{height},{weight}"print(strsql)

打印测试输出完全一致

插入数据库

当然,你表要先建好,不然没法执行 Insert 不多解释,以下为 testinfo 表的 SqlServer 建表语句

CREATE TABLE testinfo(id INT NOT NULL,name VARCHAR(64) NULL,height INT NULL,weight INT NULL
)

这里两种方法都可以导入数据库,我们使用第二种方式(有需要自己替换即可)

conn = conn()
for i in range(len(df)):id = df.iloc[i][0]name = df.iloc[i][1]height = df.iloc[i][2]weight = df.iloc[i][3]strsql = f"INSERT INTO testinfo SELECT {id},'{name}',{height},{weight}"print(strsql)cursor = conn.cursor()cursor.execute(strsql)  # 执行sql语句conn.commit()  # 提交cursor.close()

结果显示如下

数据库中已有数据,问题解决

导出:

这里提供两种导出方式:

1. 通过表名直接从数据库导出

2. 利用pandas的dataframe导出

1. 通过表名导出excel:

import xlwtdef export_excel(table_name):# 连接数据库,查询数据host, user, passwd, db = '127.0.0.1', 'root', '123', 'bms'cur = conn.cursor()sql = 'select * from %s' % table_namecur.execute(sql)  # 返回受影响的行数fields = [field[0] for field in cur.description]  # 获取所有字段名all_data = cur.fetchall()  # 所有数据# 写入excelbook = xlwt.Workbook()sheet = book.add_sheet('sheet1')for col, field in enumerate(fields):sheet.write(0, col, field)row = 1for data in all_data:for col, field in enumerate(data):sheet.write(row, col, field)row += 1book.save("%s.xlsx" % table_name)export_excel("testinfo")

执行后,产生如下文件:

2. 利用pandas的dataframe导出

提前在目录下新建好 outp 文件夹,用于接收输出文件

我们先通过查询数据库中的表,然后利用 pandas dataframe 的 to_excel 方法直接导出

strsql = 'select * from testinfo'conn = conn()
cursor = conn.cursor()
cursor.execute(strsql)  # 执行sql语句
sqldata = cursor.fetchall() # 获取执行查询语句获得的结果数据
df = pd.DataFrame(data=sqldata) # 数据送入 dataframe
cursor.close()
print(df) # 查看 dataframe# to_excel 导出
df.to_excel('outp/testinfo.xls', sheet_name='sheet1')

执行后在 outp 目录下已输出 excel 文件

希望可以解决你的问题

Python解决 excel导入数据库 Python读取数据库并保存 excel文件(多种方法详细讲解)相关推荐

  1. python运算符计算集合并集_Python集合、集合的运算、集合方法详细讲解

    集合:由不同元素组成,无序的,不重复的序列 补充知识:可变类型:列表.字典:不可变类型:数字.字符串.元组 使用大括号{}或set()方法定义集合 se=set("hello") ...

  2. Python从数据库读取大量数据批量写入文件的方法

    今天小编就为大家分享一篇Python从数据库读取大量数据批量写入文件的方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将 ...

  3. python批量读取文件内容_Python从数据库读取大量数据批量写入文件的方法

    使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将数据加载进内存,这时我们需要将数据进行预处理,分批次加载进内存. 下面是代码作用是将数据从数据库读取出来分批次写入txt文本文件,方便我们做 ...

  4. python读取数据库数据、并保存为docx_Python从数据库读取大量数据批量写入文件的方法...

    Python从数据库读取大量数据批量写入文件的方法 使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将数据加载进内存,这时我们需要将数据进行预处理,分批次加载进内存. 下面是代码作用是将数据 ...

  5. 通用万能excel导入的Python实现

    通用万能excel导入的Python实现 一.正言 从设计方案到算法和功能代码实现,花了我一周时间,在这里记录方便大家参考.废话少说,首先通过配置文件配置你想要的数据,只需要配置简单的表达式就可以实现 ...

  6. 安卓读取mysql数据库文件路径_Android开发实现读取assets目录下db文件的方法示例...

    本文实例讲述了Android开发实现读取assets目录下db文件的方法.分享给大家供大家参考,具体如下: 最近准备打算写一个关于天气预报的app,偶然的机会在一大神的博客上看到了一个获取天气的api ...

  7. 读mdb数据库中的表,返回datatable;链接postgresql数据库,读取数据库中表

    public DataTable ReadMDB(string mdbFile,string tableName){string connStr = "Provider=Microsoft. ...

  8. .net excel导入mysql_.NET Core使用NPOI将Excel中的数据批量导入到MySQL - 追逐时光者 - 博客园...

    前言: 在之前的几篇博客中写过.NET Core使用NPOI导出Word和Excel的文章,今天把同样我们日常开发中比较常用的使用Excel导入数据到MySQL数据库中的文章给安排上.与此同时还把NP ...

  9. Python之Pandas:pandas.read_csv()函数的简介、具体案例、使用方法详细攻略

    Python之Pandas:pandas.read_csv()函数的简介.具体案例.使用方法详细攻略 目录 read_csv()函数的简介 read_csv()函数的简介               ...

  10. 修改mysql数据库默认字符集_MySQL数据库之修改mysql默认字符集的两种方法详细解析...

    本文主要向大家介绍了MySQL数据库之修改mysql默认字符集的两种方法详细解析 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. (1) 最简单的修改方法,就是修改mysql的m ...

最新文章

  1. 在线翻译系统属于计算机应用领域中,【单选题】网状物编织物和机件上的滚花部分,可以在轮廓线附件用( )线示意画出...
  2. java集成网站微信,微博,qq登录
  3. WPF MVVM模式下的无阻塞刷新
  4. 林轩田机器学习基石课程笔记1 -The Learing Problem
  5. 【设计模式】Spring的核心IOC容器中用到的设计模式
  6. NumPy 矩阵库(Matrix)
  7. sql server 海量数据速度提升:SQL优化-索引(7) 【转】
  8. HDU - 4635 Strongly connected(强连通缩点+数学+思维)
  9. 万级K8s集群背后etcd稳定性及性能优化实践
  10. vue2之对象属性的监听
  11. idea中plugins配置
  12. 个性屏幕保护程序_Mac高清鸟瞰屏幕保护程序,酷毙了
  13. java取负数_阿里巴巴 Java 开发手册之MySQL 规约
  14. SpringBoot学习(第一天)
  15. php检测移动浏览器,PHP 检测手机浏览器的代码
  16. 【爬虫】用Python爬取《Nature》杂志文章的题目、摘要、下载地址
  17. 软件工程:编码和测试
  18. 最佳实践:MySQL CDC 同步数据到 ES
  19. 中国互联网公司赚钱能力排行榜
  20. eclipes使用方法

热门文章

  1. 淘宝省钱_如何省钱和组装自己的电路板
  2. Ubuntu下载安装VSCode(解决安装失败问题)
  3. An illegal reflective access operation has occurred警告
  4. A JNI error has occurred, please check your installation and try again
  5. 作业 - 加密解密和CA
  6. 物联网微生态系统-鱼缸
  7. 一线顶级互联网公司offer的成功经验【转自IT面试】
  8. modeler 连接oracle,spss modeler(clementine)连接oracle数据库
  9. aid learning如何换源
  10. 信息系统规划方法-业务流程再造(BPR)