Вставка строки даты в SQLite из Python, дающей неожиданные результаты - PullRequest
0 голосов
/ 24 октября 2018

Как гласит заголовок, я пытаюсь вставить дату (отформатированную в виде строки) в базу данных SQLite.Это работает, однако дата не отображается правильно в SQLite.

Вот подмножество моего кода:

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_date' возвращает то, что я ожидал:

2018-10-24

Однако, когда я проверяю записи в SQLite через терминал, дата отображается как:

1984

Обратите внимание, что date_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 Ответ

0 голосов
/ 24 октября 2018

Проблема в том, что вы просто объединяете переменные в свои операторы вставки, не беспокоясь о том, имеет ли смысл формат, в котором они находятся.Например, чтобы вставить литерал даты в SQLite, вы должны использовать это:

'2018-10-24'

Вот пример того, как вы можете использовать подготовленные операторы для правильной вставки:

today_date = datetime.now().strftime("%Y-%m-%d")
c.execute("INSERT INTO DATE (date_id) VALUES (?)", ("'" + today_date + "'",))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...