Mysql更新时将varchar转换为年份

标签 mysql python-3.x flask-mysql

我有一个更新 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)

This are contents of functions after updating the database.

But my actual table looks like this

如何阻止这种转换。我正在使用 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/

相关文章:

python - 使用 python 3 的中间值

php - 如果超过 512 字节,TextArea 不会保存到 mySQL

mysql - 优化 InnoDB 表和有问题的查询

mysql - 计算 SQL 查询中的总行数

MySQL 与 +(search query) 的匹配不起作用,但 +search +query 是

python - Flask-mysqldb数据库游标

python - 从脚本目录/当前目录运行Python脚本

python - 如何将字节字符串列表转换为 Python3 中的字符串

python - 使用 Flask (Python) 从 MySQL 数据库获取 "Some"数据

python - Flask-Mysql更新数据时类型错误