代码之家  ›  专栏  ›  技术社区  ›  PL200

从Python向SQLite插入日期字符串会产生意外的结果

  •  0
  • PL200  · 技术社区  · 7 年前

    下面是我的代码的一个子集:

    print("Connecting to the database...")        
    sqlite_file = './sqlite_db/cfr_changes.db'
    conn = sqlite3.connect(sqlite_file)
    c = conn.cursor()
    
    
    today_date = datetime.now().strftime("%Y-%m-%d")
    print(today_date)
    print("Inserting tracker into database...")
    
    c.execute("INSERT INTO DATE (`date_id`) VALUES(" + today_date + ")")
    c.executemany("INSERT INTO TRACKER (`cfr_status`, `comment`, `mdu`, `iwb`, `obsolete`, `date_id`) VALUES(?,?,?,?,?, " + today_date + ")", list(tracker_df.to_records(index=False)))
    #print(c.fetchall())
    
    conn.commit()
    conn.close()
    

    打印“today\u date”会返回我所期望的结果:

    2018-10-24
    

    但是,当我通过终端检查SQLite中的记录时,日期显示为:

    1984
    

    请注意,“date\u id”是VARCHAR(255),日期格式不应该是问题。我认为这只是一个字符串被存储到一个字符串中(或者足够接近)。

    有人能告诉我为什么这不能按预期工作吗?

    以下是“TRACKER”和“DATE”表的创建方法,以供参考:

    CREATE TABLE `DATE` (
    `date_id` VARCHAR(255) NOT NULL PRIMARY KEY);
    
    CREATE TABLE `TRACKER` (
    `tracker_id` INTEGER NOT NULL PRIMARY KEY,
     `cfr_status` VARCHAR(255) NOT NULL,
    `mdu` BOOLEAN, `iwb` BOOLEAN,
    `obsolete` BOOLEAN, `comment` VARCHAR(255), `date_id` VARCHAR(255) NOT NULL, FOREIGN KEY (`date_id`) REFERENCES DATE(`date_id`));
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   Madison Courto    7 年前

    问题是,您只是将变量连接到insert语句中,而不必担心它们的格式是否合理。例如,要在SQLite中插入日期文字,应使用以下命令:

    '2018-10-24'
    

    下面是一个如何使用准备好的语句进行正确插入的示例:

    today_date = datetime.now().strftime("%Y-%m-%d")
    c.execute("INSERT INTO DATE (date_id) VALUES (?)", ("'" + today_date + "'",))