Python SQLite – 使用日期和日期时间
SQLite不支持内置 DateTime 存储类,但 SQLite 允许我们使用时间戳类型。我们可以存储和检索存储在 SQLite 数据库表中的Python日期和日期时间信息,方法是将它们转换为Python日期和日期时间类型,反之亦然。
在插入日期时间值时, Python sqlite3 模块将日期时间转换为字符串格式。当从 SQLite 表中检索日期时间值时,sqlite3 模块将它们转换为字符串对象。但是我们不想要字符串类型。我们希望日期时间以 DateTime 类型存储。为此,我们需要的,因为它需要PARSE_DECLTYPES和PARSE_COLNAMES作为sqlite3的模块的连接方法的参数使用detect_types。
Syntax: connect(‘DATABASE NAME’,detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
sqlite3.PARSE_DECLTYPES: sqlite3 模块解析它返回的每一列的声明类型,然后使用类型转换器字典执行为该类型注册的转换器函数。
sqlite3.PARSE_COLNAMES: SQLite 接口解析它返回的每一列的列名。它将使用转换器字典,然后使用在那里找到的转换器函数来返回值。
插入日期和日期时间数据
首先,我们需要导入 datetime 模块并使用now()函数来获取当前时间和日期信息。然后他们将日期时间信息存储在一个变量中,因此它可以用于在 SQLite 表中插入日期时间。要将日期时间信息存储在表中,我们需要使用列数据类型作为“TIMESTAMP”。
column_name TIMESTAMP
下面的代码创建了一个数据库 'StudentAssignment.db' 和一个表 'ASSIGNMENT'。该代码还将数据插入带有日期时间信息的表中。
Python3
import datetime
import sqlite3
# get the current datetime and store it in a variable
currentDateTime = datetime.datetime.now()
# make the database connection with detect_types
connection = sqlite3.connect('StudentAssignment.db',
detect_types=sqlite3.PARSE_DECLTYPES |
sqlite3.PARSE_COLNAMES)
cursor = connection.cursor()
# create table in database
createTable = '''CREATE TABLE ASSIGNMENT (
StudentId INTEGER,
StudentName VARCHAR(100),
SubmissionDate TIMESTAMP);'''
cursor.execute(createTable)
# create query to insert the data
insertQuery = """INSERT INTO ASSIGNMENT
VALUES (?, ?, ?);"""
# insert the data into table
cursor.execute(insertQuery, (1, "Virat Kohli",
currentDateTime))
cursor.execute(insertQuery, (2, "Rohit Pathak",
currentDateTime))
print("Data Inserted Successfully !")
# commit the changes,
# close the cursor and database connection
connection.commit()
cursor.close()
connection.close()
Python3
import datetime
import sqlite3
# make a database connection and cursor object
connection = sqlite3.connect('StudentAssignment.db',
detect_types=sqlite3.PARSE_DECLTYPES |
sqlite3.PARSE_COLNAMES)
cursor = connection.cursor()
# select query to retrieve data
cursor.execute("SELECT * from ASSIGNMENT where StudentId = 2")
fetchedData = cursor.fetchall()
# to access specific fetched data
for row in fetchedData:
StudentID = row[0]
StudentName = row[1]
SubmissionDate = row[2]
print(StudentName, ", ID -",
StudentID, "Submitted Assignments")
print("Date and Time : ",
SubmissionDate)
print("Submission date type is",
type(SubmissionDate))
# commit the changes,
# close the cursor and database connection
cursor.close()
connection.close()
输出:
Data Inserted Successfully !
检索日期和日期时间数据
为了从数据库表中检索存储的日期时间信息,我们可以简单地使用选择查询并可以访问各个行数据。这里为了检索数据并检查存储数据的数据类型,我们需要在 sqlite3 模块的 connect 方法中使用detect_types作为参数。
下面的代码从“ASSIGNMENT”表中检索存储的记录。该记录包含“日期时间”类型信息。
蟒蛇3
import datetime
import sqlite3
# make a database connection and cursor object
connection = sqlite3.connect('StudentAssignment.db',
detect_types=sqlite3.PARSE_DECLTYPES |
sqlite3.PARSE_COLNAMES)
cursor = connection.cursor()
# select query to retrieve data
cursor.execute("SELECT * from ASSIGNMENT where StudentId = 2")
fetchedData = cursor.fetchall()
# to access specific fetched data
for row in fetchedData:
StudentID = row[0]
StudentName = row[1]
SubmissionDate = row[2]
print(StudentName, ", ID -",
StudentID, "Submitted Assignments")
print("Date and Time : ",
SubmissionDate)
print("Submission date type is",
type(SubmissionDate))
# commit the changes,
# close the cursor and database connection
cursor.close()
connection.close()
输出:
当我们从“ASSIGNMENT”表中检索学生的提交数据时,我们可以在输出中看到。我们访问了表格的每一行并将它们打印在特定的消息中。第一行包含学生姓名和ID,第二行打印学生提交作业的日期时间,第三行打印存储数据的类型,即我们存储的日期时间类型表即'datetime.datetime'。