Python将excel导入到mysql中
时间:2021-07-01 10:21:17
帮助过:3人阅读
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台服务器,各种自动化脚本,羡慕。。。
Python将excel导入到mysql中
标签: