为了账号安全,请及时绑定邮箱和手机立即绑定

使用Python 将excel 导入Mysql 时遭遇报错: '<' not supported between instances of 'str' and 'int'

/ 猿问

使用Python 将excel 导入Mysql 时遭遇报错: '<' not supported between instances of 'str' and 'int'

慕勒13948 2019-04-19 16:11:09

各位高手大家好:

在尝试使用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 ")

以下是要导入的excel 的部分信息(网站不能添加附件,很遗憾)

https://img4.mukewang.com/5cb98212000153db14510118.jpg

这个是遭遇的报错截图

https://img3.mukewang.com/5cb982830001f56213090339.jpg


查看完整描述

1 回答

?
战渣渣

xldate.py中 144行  if xldate < 60 改成 if int(xldate) < 60 

问题应该是你从excel读出来的内容是个字符串,拿str类型和int类型比较,所以出错了。

查看完整回答
反对 回复 2019-05-20

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信