Mysql 在更新时将 varchar 转换为年份
Mysql converts varchar to year while update
我有一个更新 varchar 时间字段的查询,但我不想将它们保留为 DATE 格式。我的字符串日期格式是 yyyy-mm-dd
是 2018-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));
我有一个更新 varchar 时间字段的查询,但我不想将它们保留为 DATE 格式。我的字符串日期格式是 yyyy-mm-dd
是 2018-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));