Python将excel导入到mysql中

分享一段前一段时间写的python代码

# encoding: utf-8
# !/usr/bin/python
import sys
import types
import datetime

import MySQLdb
import xlrd
from PyQt4 import QtGui

class MainWindow(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self)

        self.resize(450, 250)
        self.setWindowTitle(u‘导入员工信息‘)

        self.excel_file_le = QtGui.QLineEdit(self)
        self.excel_file_le.setDisabled(True)

        self.db_url_le = QtGui.QLineEdit(self)
        self.db_url_le.setPlaceholderText(u"数据库链接")
        self.db_url_le.setText("localhost")
        self.db_name_le = QtGui.QLineEdit(self)
        self.db_name_le.setPlaceholderText(u"数据库名")
        self.db_name_le.setText("sys")
        self.db_user_le = QtGui.QLineEdit(self)
        self.db_user_le.setPlaceholderText(u"用户名")
        self.db_user_le.setText("root")
        self.db_pwd_le = QtGui.QLineEdit(self)
        self.db_pwd_le.setPlaceholderText(u"密码")
        self.db_pwd_le.setText("root")

        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.excel_file_le)
        layout.addWidget(self.db_url_le)
        layout.addWidget(self.db_name_le)
        layout.addWidget(self.db_user_le)
        layout.addWidget(self.db_pwd_le)
        spacer_item = QtGui.QSpacerItem(20, 48, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        layout.addItem(spacer_item)

        self.btnSelectExcelFile = QtGui.QPushButton(u‘选择文件‘, self)
        self.btnSelectExcelFile.clicked.connect(self.openFile)
        self.btnTestConnection = QtGui.QPushButton(u‘测试连接‘, self)
        self.btnTestConnection.clicked.connect(self.test_connection)
        self.btnConfirmImport = QtGui.QPushButton(u‘确认导入‘, self)
        self.btnConfirmImport.clicked.connect(self.import_excel_file)

        button_layout = QtGui.QHBoxLayout()
        spacer_item2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        button_layout.addItem(spacer_item2)
        button_layout.addWidget(self.btnSelectExcelFile)
        button_layout.addWidget(self.btnTestConnection)
        button_layout.addWidget(self.btnConfirmImport)
        layout.addLayout(button_layout)

        self.setLayout(layout)

    def test_connection(self):
        try:
            url_list = ["hosts=" + self.db_url_le.displayText(), "user=" + self.db_user_le.displayText(),
                        "passwd=" + self.db_pwd_le.displayText(),
                        "db=" + self.db_name_le.displayText(), "charset=‘utf8‘"]
            db = MySQLdb.connect(‘,‘.join(url_list).decode("utf-8"))
            # QtGui.QMessageBox.
        except Exception, e:
            QtGui.QMessageBox.critical(self, u‘错误‘, u‘连接失败!‘)
            print e

    def import_excel_file(self):
        if not self.excel_file_le.displayText():
            QtGui.QMessageBox.critical(self, u‘错误‘, u‘请选择文件‘)
        else:
            self.read_excel_data(self, unicode(self.excel_file_le.displayText()))

    def openFile(self):
        file_list = QtGui.QFileDialog.getOpenFileNameAndFilter(self, u"选择导入文件", "", "Excel(*.xls)")
        if (file_list[0]):
            self.excel_file_le.setText(unicode(file_list[0]))

    @staticmethod
    def read_excel_data(self, path):
        excel_workbook = xlrd.open_workbook(path)
        sheet_data = excel_workbook.sheets()[0]
        ncols = sheet_data.ncols

        db = MySQLdb.connect("localhost", "root", "111111", "sys", charset=‘utf8‘)
        cursor = db.cursor()
        table_name = "pq_dw_info"
        cursor.execute("desc " + table_name)
        table_desc_list = cursor.fetchall()
        table_desc_json = {}
        for row in table_desc_list:
            table_desc_json[row[0].encode("utf-8").lower()] = row

        first_row_data = sheet_data.row_values(0)
        excute_header_sql = "insert into " + table_name + "("
        header_col_list = []
        header_col_type_list = []
        for i in range(0, ncols):
            header_col_type_list.append(table_desc_json[(first_row_data[i].lower().encode("utf-8"))])
            if i == 0:
                header_col_list.append("dw_code")
                continue
            header_col_list.append(first_row_data[i])

        excute_header_sql += ‘,‘.join(header_col_list) +                              ",CREATED_BY_USER,CREATED_OFFICE,CREATED_DTM_LOC,RECORD_VERSION) values("

        data_rows = []
        __s_date = datetime.date(1899, 12, 31).toordinal() - 1
        for i in range(1, sheet_data.nrows):
            row_data_list = sheet_data.row_values(i)
            # find data exsits
            count_sql = "select count(1) from " + table_name + " where dw_code=‘" + str(int(row_data_list[0])) + "‘"
            cursor.execute(count_sql)
            count_result = cursor.fetchall()
            if count_result[0][0] != 0:
                continue
            sql = excute_header_sql
            for j in range(0, ncols):
                cell_data = row_data_list[j]
                column_type = header_col_type_list[j][1]
                column_default_value = header_col_type_list[j][4]
                if j == 0:
                    sql += "‘" + str(int(cell_data)) + "‘,"‘‘
                    continue
                if (column_type.startswith("int") or column_type.startswith("decimal") or column_type.startswith(
                        "bigint")):
                    if cell_data:
                        sql += unicode(cell_data) + ","
                    elif column_default_value:
                        sql += unicode(column_default_value) + ","
                    else:
                        sql += "null,"

                elif (column_type.startswith("varchar") or column_type.startswith("char")
                      or column_type.startswith("longtext")):
                    if type(cell_data) is types.FloatType:
                        sql += "‘" + str(int(cell_data)) + "‘,"‘‘
                    else:
                        sql += "‘" + unicode(cell_data) + "‘,"‘‘
                elif (column_type.startswith("date")):
                    if cell_data:
                        sql += "str_to_date(‘" + datetime.date.fromordinal(
                            __s_date + int(cell_data)).strftime("%Y-%m-%d") + "‘,‘%Y-%m-%d‘),"‘‘
                    else:
                        sql += "null,"
                elif (column_type.startswith("datetime")):
                    if cell_data:
                        sql += "str_to_date(‘" + datetime.date.fromordinal(
                            __s_date + int(cell_data)).strftime("%Y-%m-%d") + "‘,‘%Y-%m-%d‘),"‘‘
                    else:
                        sql += "null,"
                else:
                    sql += "‘" + unicode(cell_data) + "‘,"‘‘
            sql += "‘admin‘,‘admin‘,sysdate(),0)"
            # print sql
            cursor.execute(sql)
        try:
            db.commit()
            db.close()
        except Exception, e:
            db.rollback()
            QtGui.QMessageBox.critical(self, u‘错误‘, u‘导入失败‘)
            print e

        print "import success!"

app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

小学生水平,偶尔拿来玩玩,现在公司项目都是安装在Windows上的,好想拿python当运维工具啊,看到很多小伙伴,使用python登录n台服务器,各种自动化脚本,羡慕。。。

时间: 2024-10-25 04:35:12

Python将excel导入到mysql中的相关文章

python将oracle中的数据导入到mysql中。

一.导入表结构.使用工具:navicate premium 和PowerDesinger 1. 先用navicate premium把oracle中的数据库导出为oracle脚本. 2. 在PowerDesinger里找到 File -->> Reverse Engineer --->> Database 将数据库导入到模型. 3  在.PowerDesinger里找到Database"--->"Change Current DBMS" 将数据库

C#将数据库导出成Excel,再从Excel导入到数据库中。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.IO; namespace CindyDatabaseProcess { class Program { static void Main(string[] args) { System.Data.DataTable dt1 = null; S

talend 将hbase中数据导入到mysql中

首先,解决talend连接hbase的问题: 公司使用的机器是HDP2.2的机器,上面配置好Hbase服务,在集群的/etc/hbase/conf/hbase-site.xml下,有如下配置: <property> <name>zookeeper.znode.parent</name> <value>/hbase-unsecure</value> </property> 这个配置是决定, Hbase master在zookeeper中

如何将Excel导入到Mysql数据库中

1.在mysql中建一张和Excel结构一样的表,或者修改excel信息,将excel的结构与mysql中table保持一致,包括字段名称. 2.利用mysql客户端工具navicat进行导入. 步骤: 1.在数据库中找到表,右键,点击“导入导出” 2.根据你要导入的文件类型,选择相关选项,然后下一步 3.选择excel文件存放位置,然后,选择里边的sheet页.我的excel中国sheet页名字是list.然后下一步 4.日期格式 自己配置.我要导入的文件中没有日期,故没有配置.然后点 下一步

Excel 导入到Datatable 中,再使用常规方法写入数据库

首先呢?要看你的电脑的office版本,我的是office 2013 .为了使用oledb程序,需要安装一个引擎.名字为AccessDatabaseEngine.exe.这里不过多介绍了哦.它的数据库连接字符串是"Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'" 所以,我们是使用ole来读取excel的. 1 excel 的文件内容:

如何将excel导入到数据库中并在gridview中显示

在页面上导入个excel文件,将该excel中的数据导入到数据库中,并且在页面的gridview中把数据显示出来. 1.在Asp.net中怎样将Excel文件中的数据导入到GridView中呢? 首先我们将这张表中的数据转换为DataTable类型的数据源,做一个函数来解决这个问题 private DataTable createDataSource(string strPath) { stringstrCon; strCon = "Provider=Microsoft.Jet.OLEDB.4.

C# 之 Excel 导入一列中既有汉字又有数字:数字可以正常导入,汉字导入为空

今天在做一个Excel导入功能,一切开发就绪,数据可以成功导入.导入后检查数据库发现有一列既有汉字又有数字,数字正常导入,汉字为空.但是前面同样既有汉字又有数字的列可以导入成功. 查看excel 源文件,如下图: 仔细观察两列略有不同,前两列的数字单元格左上角有个绿色三角形,选中单元格,左边有一个信息显示“ 次单元格中的数字为文本形式,或者前面有撇号. ”,也就是 “ 以文本形式存储的数字 ”. 然后尝试选中内容列,右键设置单元格格式为“ 文本 ”,修改后如下图: 再次导入仍然失败,单元格左上角

22.把hive表中数据导入到mysql中

先通过可视化工具链接mysql,在链接的时候用sqoop 用户登录 在数据库userdb下新建表 保存,输入表名upflow 现在我们需要把hive里面的数据通过sqoop导入到mysql里面 sqoop export --connect jdbc:mysql://node1:3306/userdb \ --username sqoop --password sqoop --table upflow --export-dir /user/hive/warehouse/mydb2.db/upflo

将excel表导入到mysql中

//导入excel表 方法一: 1)打开Excel另存为CSV文件 2)将文件编码转化为utf8,用NotePad++打开csv文件,选择格式-转为utf8编码格式-保存 2)在MySQL建表,字段的顺序要跟Excel保持一致 3)load data local infile '[你的csv文件路径]' into table [表名] fields terminated by ','; 例如: load data local infile 'E:\\1.csv' into table gift_