Вставить запись datetime в таблицу с типом данных TIMESTAMP
Я пытаюсь создать систему (с ботом Discord, но это не имеет отношения к этому), где он перечисляет нарушения пользователя, например, когда это произошло, где, почему и т. Д., И мне нужен тип данных "date", который регистрирует отметка времени, когда это произошло.
Я пробовал иметь DATE
тип данных должен быть "отметка времени" (также как "дата и время", но происходит та же ошибка)
conn1 = apsw.Connection('./dbs/warns.db')
warns = conn1.cursor()
warns.execute(
"""
CREATE TABLE IF NOT EXISTS warns
(id INTEGER PRIMARY KEY AUTOINCREMENT,
date timestamp,
server string,
user string,
author string,
reason string)
"""
)
def add_warn(guild: str, user: str, author: str, reason):
now = datetime.datetime.utcnow()
with conn1:
warns.execute("INSERT INTO warns (date, server, user, author, reason) VALUES (?, ?, ?, ?, ?)", (now, guild, user, author, reason))
Я получаю TypeError: Bad binding argument type supplied - argument #1: type datetime.datetime
ошибка
1 ответ
Из синтаксиса оператора create table (AUTOINCREMENT
без подчеркивания) и apsw
, я подозреваю, что вы используете базу данных SQLite.
Если вы хотите вставить текущую метку времени в timestamp
column, мое первое предложение - сделать это непосредственно в SQL, а не использовать переменную, сгенерированную в python. В sqlite,CURRENT_TIMESTAP
дает вам текущую дату / время в качестве отметки времени:
warns.execute(
"INSERT INTO warns (wdate, server, user, author, reason) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?)",
(guild, user, author, reason)
)
Другой вариант, который еще больше упростит ваш код, - установить значение по умолчанию для столбца отметки времени при создании таблицы. Затем вы можете просто игнорировать этот столбец при вставке и не сомневаться, что будет присвоено правильное значение:
warns.execute(
"""
CREATE TABLE IF NOT EXISTS warns (
id INTEGER PRIMARY KEY AUTOINCREMENT,
wdate timestamp DEFAULT CURRENT_TIMESTAMP,
server string,
user string,
author string,
reason string
)
"""
)
def add_warn(guild: str, user: str, author: str, reason):
with conn1:
warns.execute(
"INSERT INTO warns (server, user, author, reason) VALUES (?, ?, ?, ?)",
(now, guild, user, author, reason)
)
Примечание: date
не является разумным именем столбца, поскольку оно конфликтует с именем типа данных. Я переименовал этоwdate
во всем приведенном выше коде.