我在将datetime.time
变量传递到SQLite数据库时遇到了麻烦,我这里有一些非常基本的代码来显示变量到底是什么。
import datetime as dt
time = dt.datetime.now().time()
time = time.strftime('%H:%M')
time = dt.datetime.strptime(time, '%H:%M').time()
print(time)
print(type(time))
time = dt.datetime.now().time()
获取datetime.time
类型中的当前时间。
- 输出:*
17:34:48.286215
<class 'datetime.time'>
然后time = time.strftime('%H:%M')
只检索小时和分钟,但类型为str
- 输出:*
17:35
<class 'str'>
然后我用time = dt.datetime.strptime(time, '%H:%M').time()
将其转换回datetime.time,得到输出:
17:32:00
<class 'datetime.time'>
Time
类型的列接受文档(SQLite3 DateTime Documentation)中显示的HH:SS格式,因此我不确定为什么会出现此错误:
sqlite3.InterfaceError: Error binding parameter 11 - probably unsupported type.
在此INSERT语句中:
cursor.execute("INSERT INTO booked_tickets VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", (booking_ref, ticket_date, film, showing, ticket_type, num_tickets, cus_name, cus_phone, cus_email, ticket_price, booking_date, booking_time, ))
EDIT:根据请求,下面是一段代码片段,用于重新创建包含损坏列的表:
import datetime as dt
import sqlite3
connection = sqlite3.connect("your_database.db")
cursor = connection.cursor()
# Get the current time
time = dt.datetime.now().time()
# Format the time as a string using the '%H:%M' format
time_str = time.strftime('%H:%M')
# Parse the string back to a time object using the '%H:%M' format
time = dt.datetime.strptime(time_str, '%H:%M').time()
# Create the table
cursor.execute("CREATE TABLE test (example_time Time)")
# Insert the time into the example_time column
cursor.execute("INSERT INTO test VALUES (?)", (time, ))
connection.commit()
connection.close()
3条答案
按热度按时间p1tboqfb1#
检查SQLite datatypes documentation
2.2.日期和时间数据类型
SQLite没有专门用于存储日期和/或时间的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为TEXT、真实的或INTEGER值:
公历。INTEGER表示Unix时间,是自1970-01-01 00:00:00 UTC以来的秒数。
应用程序可以选择以这些格式中的任何一种存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。
将日期存储为TEXT数据类型。
hpcdzsge2#
没有日期或时间data type in SQLite。
您问题中的链接中的文档明确指出,在SQLite中,您可以通过3种方式存储日期时间:ISO-8601格式文本、整数unix历元和浮点julian日。
如果你选择第一种方式,那么你应该传递字符串:
但是,您也可以让SQLite获取当前日期和/或时间。
假设在
booking_date
和booking_time
列中需要当前日期和时间,则可以将这些列定义为:然后你不需要在
INSERT
语句中为它们传递任何东西:3htmauhk3#
您参考的文档主要讨论如何设置表示日期和时间的列值的格式。也就是说,它讨论如何处理数据库中已存在的日期和时间。
然而,我认为它确实给予了足够的信息来帮助你。它说:
日期和时间值可存储为
因此,您希望将日期和时间定义为完整的ISO-8601日期字符串或数字并提供。在定义表时,您可以通过将列类型分别定义为STRING、真实的或INTEGER来指明要使用哪种格式。
以下文档讨论了如何以下列格式之一存储日期和时间:https://www.sqlitetutorial.net/sqlite-date/