📜  Python SQLite – 使用日期和日期时间

📅  最后修改于: 2022-05-13 01:54:53.656000             🧑  作者: Mango

Python SQLite – 使用日期和日期时间

SQLite不支持内置 DateTime 存储类,但 SQLite 允许我们使用时间戳类型。我们可以存储和检索存储在 SQLite 数据库表中的Python日期和日期时间信息,方法是将它们转换为Python日期和日期时间类型,反之亦然。

在插入日期时间值时, Python sqlite3 模块将日期时间转换为字符串格式。当从 SQLite 表中检索日期时间值时,sqlite3 模块将它们转换为字符串对象。但是我们不想要字符串类型。我们希望日期时间以 DateTime 类型存储。为此,我们需要的,因为它需要PARSE_DECLTYPESPARSE_COLNAMES作为sqlite3的模块的连接方法的参数使用detect_types。

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'。