mysql在更新时将varchar转换为year

y1aodyip  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(396)

我有一个更新varchar时间域的查询,我不想让它们保持日期格式。我的字符串日期格式是 yyyy-mm-dd2018-05-13 .

query = "UPDATE SchedulePlaylist
    SET start = %s ,end = %s
    WHERE playlist_id = %s AND schedule_id = %s" % (
                str(start), str(end), playlist_id, schedule_id)



如何防止这种转换。我正在使用python和mysqldb连接器

izkcnapc

izkcnapc1#

正确的方法是使用参数传递值。由于日期/字符串问题,这可能会变得很尴尬。
在您的案例中,最简单的解决方案是在值周围添加单引号:

query = "UPDATE SchedulePlaylist
    SET start = '%s', end = '%s'
    WHERE playlist_id = %s AND schedule_id = %s" % (
                str(start), str(end), playlist_id, schedule_id)

您的代码将2018-04-30视为算术并生成1984。单引号使它们表示为字符串。
您真正应该做的是修复表,使列具有正确的类型。如果必须将日期存储为字符串,则存储为yyyy-mm-dd的字符串是合理的类型。否则使用 date . 但是,这并不能解决您的更新问题。
更好的解决方案是使用参数,这很简单。参数在 execute 电话:

query = """
UPDATE SchedulePlaylist
    SET start = ?, end = ?
    WHERE playlist_id = ? AND schedule_id = ?
""";

cursor.execute(query, (str(start), str(end), playlist_id, schedule_id));

相关问题