使用Python 语句将excel 自动导入本地Mysql数据表, 显示执行完毕,但Mysql 数据表中没有找到纪录

各位高手好:

在尝试着把之前自己的工作纪录导进本机建立的Mysql 数据库中
网上找到了某大神的代码:
如连接: https://www.cnblogs.com/longbigbeard/p/9309180.html

运行代码后显示运行成功,如图:
图片说明
然而,当在MySQL 表格中复查的时候,发现数据库表格为空值(如图)

图片说明

要导入的excel 表格截图如下:(好遗憾,似乎CSDN不能添加excel作为附件)

图片说明

仿写代码如下:高手们知道问题出在那里么?

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): #前5行是标题名,对应表中的字段名所以应该从第6行开始,计算机以0开始计数,所以值是6

        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 = 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 ")


weixin_43746317
James the Tomato� 回复James the Tomato�: 用这个 括起来
9 个月之前 回复
weixin_43746317
James the Tomato� 问题出现在 定义sql 那一步1. 占位符 “S%"缺少一个。 2.在编写向Mysql表格中植入列的语句时候,对应的表名和对应的列名一定要和数据库中的名称【完全一致】(比如,原表名中的空格等等 也需要在代码中保留)可以使用【 】符号把表明括起来,即可避免空格的情况(如:数据库中列名称是包含空格的 Initiation date,在代码中则需要用特殊符号括起来,如:Initiation date才行,否则Mysql将无法识别)
9 个月之前 回复
weixin_43746317
James the Tomato� 各位,这个问题解决了: 问题的原因有2个:
9 个月之前 回复

3个回答

你这里面有类型转换错误

as_csdn
取个什么名字好。 回复James the Tomato�: 你的报错是:并非所有参数都在字符串格式化期间转换。报错信息下面已经指出了是哪个
9 个月之前 回复
weixin_43746317
James the Tomato� 老兄能否指出一下
9 个月之前 回复

确定执行成功了吗,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)"后面的占位符少了一个呢

huageng1
huageng1 回复James the Tomato�: initiation_date 表有这个列吗,报错给的信息是没有名叫initiation_date的列
9 个月之前 回复
weixin_43746317
James the Tomato� 不算是成功了,只是可以执行而已
9 个月之前 回复
weixin_43746317
James the Tomato� 的确是 少了一个占位符,修改后运行 得到新的报错pymysql.err.InternalError: (1054, "Unknown column 'initiation_date' in 'field list'")
9 个月之前 回复

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)"
SQL语句有问题。

weixin_43746317
James the Tomato� hi 多谢 这个SQL 部分我尝试了一下,也还是不行的
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题