James the Tomato�
2019-04-19 15:58用Python 将excel 导入Mysql 时遭遇报错: '<' not supported between instances of 'str' and 'int'
各位高手大家好:
在尝试使用Python语句将 工作用excel 导入本机的Mysql 时,需要将"EOL By"字段被Python识别成数字。
为了将其转化成可接受的日期型的形式,我使用了xlrd.xldate_as_datetime()的方法,随即报错: '<' not supported between instances of 'str' and 'int' 。 我想不明白:分明之前使用了同样方法的initiation date可以正常转化成日期型显示,而EOL By"字段就显示报错了
以下是我的代码:
import xlrd
import pymysql
import xlrd
# 打开excel----------------------------------------------------------
def open_excel():
try:
book = xlrd.open_workbook('C:/Users/lenovo/Desktop/工作纪录就靠它了.xlsx') #文件名,把文件与py文件放在同一目录下
except:
print("open excel file failed!")
try:
sheet = book.sheet_by_name('ANZ纪录') #execl里面的worksheet1
return sheet
except:
print("locate worksheet in excel failed!")
# 验证:open_excel 是跑的通的
#-----------------------------------------------------------------
#连接数据库-------------------------------------------------------
try:
db = pymysql.connect(host='localhost',user="root",
passwd='QAZwsx12345678',
db='test',
charset='utf8')
except:
print("could not connect to mysql server")
# 验证:本机数据库连接 是跑的通的
#----------------------------------------------------------------
def search_count():
cursor = db.cursor()
select = "select count(PN) from pn_infor" #获取表中xxxxx记录数
cursor.execute(select) #执行sql语句
line_count = cursor.fetchone()
print(line_count[0])
#验证:search_count 是可以跑通的
#-----------------------------------------------------------------
def insert_deta():
sheet = open_excel()
cursor = db.cursor()
for i in range(5, sheet.nrows): #第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1
inidate = sheet.cell(i,0).value #取第i行第0列
initiation_date = xlrd.xldate_as_datetime(inidate,0) # 把数字型的日期解码成真正的日期
requestor = sheet.cell(i,1).value#取第i行第1列,下面依次类推
EB = sheet.cell(i,2).value
EOL_By = initiation_date = xlrd.xldate_as_datetime(EB,0) # 把数字型的日期解码成真正的日期
customer_name = sheet.cell(i,3).value
Type_of_Service = sheet.cell(i,4).value
PN = sheet.cell(i,5).value
description30 = sheet.cell(i,6).value
description80 = sheet.cell(i,7).value
Enable = sheet.cell(i,8).value
CostUSD = sheet.cell(i,9).value
CostAUD = sheet.cell(i,10).value
ListpriceAUD = sheet.cell(i,11).value
DistipriceAUD = sheet.cell(i,12).value
print(initiation_date)
print(requestor)
print(EOL_By)
print(customer_name)
print(Type_of_Service)
print(PN)
print(description30)
print(description80)
print(Enable)
print(CostUSD)
print(CostAUD)
print(ListpriceAUD)
print(DistipriceAUD)
print("---------------")
value = (initiation_date,requestor,EOL_By,customer_name,Type_of_Service,PN,description30,description80,Enable,CostUSD,CostAUD,ListpriceAUD,DistipriceAUD)
print(value)
sql = "INSERT INTO pn_infor(initiation_date,requestor,EOL_By,customer_name,Type_of_Service,PN,description30,description80,Enable,CostUSD,CostAUD,ListpriceAUD,DistipriceAUD)VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
cursor.execute(sql,value) #执行sql语句
db.commit()
cursor.close() #关闭连接
insert_deta()
db.close()#关闭数据
print ("ok ")
- 点赞
- 回答
- 收藏
- 复制链接分享
0条回答
为你推荐
- springboot: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
- spring
- java
- 1个回答
- XAMPP错误:MySQL意外关闭
- xampp
- mysql
- php
- 1个回答
- 将文件移动到其他服务器后,为什么exif_read_data()无法正常工作?
- exif
- php
- 1个回答
- 直接引用带有import关键字的JS脚本会报错
- html5
- javascript
- node.js
- chrome
- ecmascript
- 2个回答
- C++编译时,dynet的nodes.cc出错:THIS_TYPE_IS_NOT_SUPPORTED,怎么解决?
- c++
- 2个回答
换一换