我有一个更新 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 连接器
最佳答案
正确的方法是使用参数来传递值。由于日期/字符串问题,这可能会变得很尴尬。
您的情况的简单解决方案是在值周围添加单引号:
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 的字符串是合理的类型。否则使用日期
。但是,这并不能解决您的更新问题。
更好的解决方案是使用参数,而且很简单。参数进入 execute
调用:
query = """
UPDATE SchedulePlaylist
SET start = ?, end = ?
WHERE playlist_id = ? AND schedule_id = ?
""";
cursor.execute(query, (str(start), str(end), playlist_id, schedule_id));
关于Mysql更新时将varchar转换为年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50316925/