用pandas从excel导入数据,到写入数据库, 综合来说其实很简单,只有pandas库中的两个函数:1.read_excel(),2.to_spl()。

首先先导入pandas库:

import pandas as pd

初始化参数:

def __init__(self):self.path = os.path.join(settings.BASE_DIR, 'static/xls/basic.xls')  # excel的存放路径self.engine = create_engine('mysql+pymysql://test:test@localhost:3306/goldtwo?charset=utf8', encoding="utf-8")  # 建立数据库连接

从excel中导入数据: 原文—>http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html?highlight=read_excel#pandas.read_excel


'''
pd.read_excel()
该函数主要的参数为io、sheetname、header、names、encoding。
io:excel文件,可以是文件路径、文件网址、file-like对象、xlrd workbook;
sheetname:返回指定的sheet,参数可以是字符串(sheet名)、整型(sheet索引)、list(元素为字符串和整型,返回字典{'key':'sheet'})、none(返回字典,全部sheet);
header:指定数据表的表头,默认取第一行为表头,可以设置为None不取表头,默认为header=0;
names:返回指定name的列,参数为array-like对象。
encoding:关键字参数,指定以何种编码读取。
该函数返回pandas中的DataFrame或dict of DataFrame对象,利用DataFrame的相关操作即可读取相应的数据。
'''
data_dict = pd.read_excel(self.path,sheet_name=["国家代码", "包装种类"], encoding="UTF-8")
data_dict2 = pd.read_excel(self.path,sheet_name=["币种代码", "货物通关代码", "联系人方式"], header=None, encoding="UTF-8") 

写入数据库,这里需要注意 连接数据库不能使用pymysql,需要使用python的ORM框架 —> SQLAlchemy 使用上面的create_engine()函数创建连接。关于to_sql参数  原文—>http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html

"""
DataFrame类型.to_sql()
name:string
SQL表的名称
con:SQLAlchemy引擎或DBAPI2连接(传统模式)
使用SQLAlchemy可以使用该库支持的任何数据库。如果是DBAPI2对象,则仅支持sqlite3。
flavor:'sqlite',默认无
从版本0.19.0开始不推荐使用:如果不使用SQLAlchemy,则'sqlite'是唯一受支持的选项。
schema:string,默认无
指定架构(如果数据库flavor支持此)。如果为None,请使用默认架构。
if_exists:{'fail','replace','append'},默认'fail'
失败:如果表存在,则不执行任何操作。
replace:如果表存在,则删除它,重新创建它,然后插入数据。
append:如果表存在,则插入数据。创建如果不存在。
index:布尔值,默认为True
将DataFrame索引写为列。
index_label:字符串或序列,默认为None
索引列的列标签。如果给出None(默认)且 index为True,则使用索引名称。如果DataFrame使用MultiIndex,则应该给出一个序列。
chunksize:int,默认无
如果不是None,那么每次都会批量写入这些大小的行。如果为None,则将立即写入所有行。
dtype:列名称为SQL类型的dict,默认为None
可选指定列的数据类型。SQL类型应该是SQLAlchemy类型,或者是sqlite3后备连接的字符串。
"""self.country.to_sql("ManifestCountryCode", self.engine, if_exists='append', index=False)

这就写入数据库拉,好啦!

贴出完整代码:

import os
import pandas as pd
import numpy as np
from sqlalchemy import create_enginefrom CustomsClearance import settingsclass SaveManifestBasic(object):"""读取excel数据 保存 公路舱单的基本信息"""def __init__(self):self.path = os.path.join(settings.BASE_DIR, 'static/xls/basic.xls')self.engine = create_engine('mysql+pymysql://btrProject:welcome2btr@111.230.242.51:3306/goldtwo8.1?charset=utf8', encoding="utf-8")self.country = None  # 国家代码self.wraptype = None  # 包装种类self.currcode = None  # 币种代码self.carnetcode = None  # 货物通关代码self.communication = None  # 联系人方式def start(self):self.manifest_read_excel()self.hanlder_data()self.insert_data()def manifest_read_excel(self):''' 读取excel数据'''data_dict = pd.read_excel(self.path,sheet_name=["国家代码", "包装种类"], encoding="UTF-8")data_dict2 = pd.read_excel(self.path,sheet_name=["币种代码", "货物通关代码", "联系人方式"], header=None, encoding="UTF-8")self.country = pd.DataFrame(data_dict.get("国家代码"))self.wraptype = pd.DataFrame(data_dict.get("包装种类"))self.currcode = pd.DataFrame(data_dict2.get("币种代码"))self.carnetcode = pd.DataFrame(data_dict2.get("货物通关代码"))self.communication = pd.DataFrame(data_dict2.get("联系人方式"))def hanlder_data(self):""" 处理excel 导入的数据"""# 国家代码处理self.country["ISO 3166-1-alpha-2 code"] = self.country["ISO 3166-1-alpha-2 code"].apply(lambda x: np.NaN if str(x).isspace() else x) # 把空格替换成np.nanself.country.rename(columns=({'ISO 3166-1-alpha-2 code': 'Code', 'Country names': 'Name',}), inplace=True)  #  修改列名self.country.dropna(axis=0, how='any', inplace=True)  # 删除空值的行  axis:0为行1为列# 包装种类处理self.wraptype.columns = ["code","numbercode","name","nameen"]  # 换列名 匹配表结构# 币种代码self.currcode.columns = ["code", "name"]# 货物通关代码self.carnetcode.columns = ["code", "name"]# 联系人方式self.communication.columns = ["code", "nameen", "name"]print(self.wraptype)print(self.currcode)print(self.carnetcode)def insert_data(self):# 将表格的数据导入数据库# with transaction.atomic():self.country.to_sql("ManifestCountryCode", self.engine, if_exists='append', index=False)self.wraptype.to_sql("ManifestWraptype", self.engine, if_exists='append', index=False)self.currcode.to_sql("ManifestCurrCode", self.engine, if_exists='append', index=False)self.carnetcode.to_sql("ManifestCarnetCode", self.engine, if_exists='append', index=False)self.communication.to_sql("ManifestCommunication", self.engine, if_exists='append', index=False)if __name__ == '__main__':save = SaveManifestBasic()save.start()

pandas从excel导入数据,写入数据库相关推荐

  1. 从Excel导入数据到数据库

    开发工具与关键技术:VS2015,ASP.NET MVC撰写时间:2019年5月24日 通过网页页面把Execl的数据导入到数据库. 在导入数据之前要先设计出一个导入数据的Excel模板,写入数据就规 ...

  2. 通过java将Excel表格导入数据到数据库

    文章目录 一.首先.我们使用到的是apache的开源框架<poi> excel导入数据到数据库原理. demo案例:(内附注释) 实体类 数据导入解析工具类 实例业务接口如下 一.首先.我 ...

  3. java操作mysql导表_Java实现批量导入excel表格数据到数据库中的方法

    本文实例讲述了Java实现批量导入excel表格数据到数据库中的方法.分享给大家供大家参考,具体如下: 1.创建导入抽象类 package com.gcloud.common.excel; impor ...

  4. SpringBoot提供接口实现Excel导入数据并存储到数据库中

    SpringBoot提供接口实现Excel导入数据并存储到数据库中 完整项目文件 1 效果展示 1.1 Excel数据 zxy.xlsx 1.2 导入后数据库中数据 CREATE TABLE `use ...

  5. 使用PhpSpreadsheet将Excel导入到MySQL数据库

    使用PhpSpreadsheet将Excel导入到MySQL数据库 日常开发中,我们经常遇到这样的场景,需要将一个Excel表格数据如客户信息.学生成绩表导入到系统数据库中,然后在系统中进行进一步操作 ...

  6. ASP.NET将EXCEL导入SQL SERVER数据库的代码

    ASP.NET将EXCEL导入SQL SERVER数据库的代码 2007-11-13 10:36 在网上找到一个Asp.Net将Excel数据导入Sql Server数据库的的例子,是调用存储过程的, ...

  7. Python入门到实战(五)自动化办公、pandas操作Excel、数据可视化、绘制柱状图、操作Word、数据报表生成、pip install国内镜像下载

    Python入门到实战(五)conda使用.pandas操作Excel.数据可视化.绘制柱状图.操作Word.数据报表生成.pip install国内镜像下载 conda使用 常用操作 配置VS+Co ...

  8. Excel导入数据轻松生成智能图表,助力数据分析

    运营助手,Excel导入数据轻松生成智能图表,助力数据分析 2023-04-18 10:21·淡定海风L 智能问答BI是一种先进的数据分析,它可以帮助用户快速地从海量数据中获取有用的信息,并将其可视化 ...

  9. Excel导入数据时间格式问题处理

    问题背景:java中使用poi进行excel导入数据时,日期格式在数据库中存放为varchar2类型.问题:存放数据日期读取数据为"44439"的数字,因判断格式类型为yyyy-m ...

  10. sqlserver excel导入数据时有null,为空值

    sqlserver excel导入数据时有null,最完美解决办法 1.说明为什么会出现导入的数据会为null? 因为在数据库导入数据时,他会自动检测数据的类型,文字一般检测为nvarchar类型,而 ...

最新文章

  1. 公开课 | 人脸识别的最新进展以及工业级大规模人脸识别实践探讨
  2. java中并行_[JAVA] 12. Java中的并行Concurrency
  3. WebAdaptor Object reference not set to an instance of an object.
  4. Sublime text 2下alignment插件无效的解决办法
  5. 微信打开页面底部显示“原页面已由QQ浏览器云转码”解决办法
  6. 计算机乘积函数讲解,计算机函数算法7
  7. PHP获取访客ip、系统、浏览器等信息[转]
  8. 单片机数码管00 99c语言,STC89C52单片机数码管显示00~99,间隔1S程序
  9. 【物理应用】基于matlab车载自组织网络中路边性能及防碰撞算法研究【含Matlab源码 263期】
  10. Linux设置bypass网卡,Linux pwn入门教程(7)——PIE与bypass思路
  11. CSS技能点--带图标的标题栏
  12. 办公电脑远程软件有哪些、这几款你知道吗
  13. flutter上分之路1-新手教学(配置安装)
  14. Web端和App端测试区别
  15. 基于gibbsLDA的文本分类
  16. ICC布局布线 实践课
  17. phpstorm中,光标变成一个长方红色块,如何调回来?
  18. 【云计算】云计算的优势以及未来的发展趋势
  19. NYT assail military militant
  20. Hyperledger Fabric链码修改与测试(一)

热门文章

  1. c语言变量赋值字母,C语言变量定义和赋值
  2. 图表控件AnyChart使用JavaScript创建维恩图
  3. npm切换到百度镜像源
  4. Android虚拟机的理解和内存管理
  5. [安卓逆向]安卓逆向-一次简单的静态分析
  6. UE发生GPU崩溃D3D丢失,真的跟硬件有关系。
  7. metasploit的SET的Credential Harvester Attack Method
  8. 混乱之子第七季/全集Sons of Anarchy迅雷下载
  9. 密码如何改变了我的一生
  10. MySQL中emoji表情包的存储问题