有客自远方来52 2024-04-22 00:25 采纳率: 15.3%
浏览 4
已结题

数据类型转换的错误应该怎么解决?(语言-python|开发工具-pycharm)

我想实现更新数据库中的日期数据,使增加七天,返回的错误显示数据已经增加了七天,但为什么还是有数据转换的错误?
功能实现代码

def update(self):
    datestr = self.timeInput.text()
    date_time_obj = datetime.strptime(datestr, '%Y-%m-%d')
    new_date = (date_time_obj + timedelta(days=7)).strftime('%Y-%m-%d')
    borrow2 = Rbook.my_construtor2(None, None, None, new_date)
    if borrowDao.add(borrow2) > 0:
        self.x = show_custom_message_box("系统提示", "借阅成功!")
        self.resetForm()
        self.initTable()
    else:
        self.x = show_custom_message_box("系统提示", "借阅失败!")

数据库模块代码


def update(rbook: Rbook) -> int:
    """
    更新数据
    :param s_book:
    :return:
    """
    con = None
    try:
        con = dbUtil.getCon()
        cursor = con.cursor()
        # 更新数据
        sql = f"UPDATE borrow set returnDate= DATEADD(week,1,returnDate) where bid='{rbook.bid}'"
        cursor.execute(sql)
        con.commit()
        return cursor.rowcount
    except Exception as e:
        print(f"更新数据时发生错误: {e}")
        if con is not None:
            con.rollback()
        return 0
    finally:
        dbUtil.closeCon(con)

Conversion failed when converting the varchar value '2024-05-03' to data type int

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-22 00:25
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试将一个日期字符串('2024-05-03')插入到一个预期为整数类型的列中,导致了数据类型转换错误。根据提供的代码,问题可能出现在SQL语句中。在执行DATEADD函数时,你需要确保所有的参数都是正确的数据类型。

    首先,让我们检查一下SQL语句。在这个例子中,你正在尝试对returnDate字段应用DATEADD函数,并且这个字段应该是日期类型。但是,当查询条件中包含bid时,它的值(即rbook.bid)应为整数类型。所以,这里的问题可能是bid变量的数据类型不正确,或者是SQL语句中其他部分出现了问题。

    为了修复这个问题,我们需要确保bid是整数类型,并且在执行SQL语句之前进行适当的类型转换。以下是修改后的代码:

    def update(self):
        datestr = self.timeInput.text()
        date_time_obj = datetime.strptime(datestr, '%Y-%m-%d')
        new_date = (date_time_obj + timedelta(days=7)).strftime('%Y-%m-%d')
    
        # 确保bid是整数类型
        bid = int(rbook.bid)  # 假设rbook.bid是从某个对象获取的bid值
    
        borrow2 = Rbook(my_constructor2_key=None, my_constructor2_value=None, None, new_date)
        
        if borrowDao.update(borrow2, bid) > 0:
            self.x = show_custom_message_box("系统提示", "借阅成功!")
            self.resetForm()
            self.initTable()
        else:
            self.x = show_custom_message_box("系统提示", "借阅失败!")
    
    # 在数据库模块中,修改update方法接收一个新的参数bid
    def update(rbook: Rbook, bid: int) -> int:
        """
        更新数据
        :param rbook:
        :param bid:
        :return:
        """
        con = None
        try:
            con = dbUtil.getCon()
            cursor = con.cursor()
            # 更新数据
            sql = f"UPDATE borrow SET returnDate= DATEADD(week, 1, returnDate) WHERE bid={bid}"
            cursor.execute(sql)
            con.commit()
            return cursor.rowcount
        except Exception as e:
            print(f"更新数据时发生错误: {e}")
            if con is not None:
                con.rollback()
            return 0
        finally:
            dbUtil.closeCon(con)
    

    这段代码做了以下更改:

    1. 在调用borrowDao.update()之前,确保bid是一个整数。
    2. 在数据库模块的update()方法中添加了一个新的参数bid,并将其用于SQL语句中。

    这样应该可以解决你的问题。如果你还有其他关于代码或数据库操作的问题,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月22日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求