Mysql 在更新时将 varchar 转换为年份

Mysql converts varchar to year while update

我有一个更新 varchar 时间字段的查询,但我不想将它们保留为 DATE 格式。我的字符串日期格式是 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 和 flask_mysqldb 连接器

正确的方法是使用 参数 来传递值。由于 date/string 问题,这可能会很尴尬。

在您的案例中,天真的解决方案是在值周围添加单引号:

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。单引号使它们表示为字符串。

您真正应该做的是修复 table,以便列具有正确的类型。如果必须将日期存储为字符串,则存储为 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));