小编典典

为什么mysql不接受这个日期时间插入?

all

我收到此错误消息:OperationalError: (1292, "Incorrect datetime value: '19/06/2020 13:15' for columntest1 .posts .posted_atat row 1") 我正在导入此代码:

with connection.cursor() as cur:
    q = """
            INSERT INTO posts(postid, posted_at, num_comments, score, selftext, title, total_awards_received, upvote_ratio, id, subredditid) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
    """

    cur.executemany(q,postsdata)
    connection.commit()

进入这张表:

 q = """
        CREATE TABLE posts(
            postid INT NOT NULL,
            posted_at DATETIME, 
            num_comments INT,
            score INT,
            selftext VARCHAR(10000),
            title VARCHAR(10000),
            total_awards_received INT,
            upvote_ratio DOUBLE,
            id INT,
            subredditid INT,
            PRIMARY KEY  (postid),
            FOREIGN KEY (id) REFERENCES users(id),
            FOREIGN KEY (subredditid) REFERENCES subreddits(subredditid)

        );
    """
    cur.execute(q)
    connection.commit()

数据集第一行的值(假设发生错误的位置):

posted_at                                                 19/06/2020 13:15

任何人都可以帮忙吗?这一直把我逼到墙边,我不明白为什么 mysql 不接受这个?

编辑-更多信息 这是我的数据框的样子:

postsdf = df[['postid', 'posted_at', 'num_comments', 'score', 'selftext', 'title', 'total_awards_received', 'upvote_ratio', 'id']]
    postsdf["subredditid"] = subredditsdfdrop["subredditid"]
    postsdf["subredditid"] = postsdf["subredditid"].fillna(value = 0)
    postsdata = postsdf.values.tolist()

然后我将“postsdata”列表传递到顶部的插入语句中。我被告知“posted_at”值的格式应该匹配YYYY-MM-DD hh:mm:ss[.fraction]。执行此操作的代码行是什么?


阅读 62

收藏
2022-08-03

共1个答案

小编典典

问题是 MySQLDATETIME标准格式是YYYY-MM-DD hh:mm:ss[.fraction],而您使用的是以下格式:DD/MM/YYYY hh:mm. 为了解决此问题,您应该:

  • 更改您的输入数据以反映该标准
  • 将字段类型更改为VARCHAR并应用STR_TO_DATE函数将其转换为DATETIME查询中的标准格式(如果需要)

前一种选择优于第二种选择,但如果您的输入数据被迫采用原始格式,总有办法。

2022-08-03