SQLite 创建表 设置默认日期时区
介绍
SQLite 是一种轻量级的关系型数据库管理系统,它以库的形式嵌入到应用程序中。在 SQLite 中,可以通过创建表来存储和组织数据。本文将详解如何使用 SQLite 创建表,并设置默认日期和时区。
创建表
在 SQLite 中,可以使用 CREATE TABLE
语句来创建表。表由列组成,每一列都有一个名称和一个数据类型。下面是一个创建表的基本语法:
CREATE TABLE 表名 (
列1名称 数据类型,
列2名称 数据类型,
...
列N名称 数据类型
);
例如,我们可以创建一个名为 users
的表,包含 id
、name
和 age
三个列,分别表示用户的唯一标识、姓名和年龄:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
);
在上述示例中,id
列被定义为 INTEGER
数据类型,并使用 PRIMARY KEY
约束表示为主键;name
列被定义为 TEXT
数据类型;age
列被定义为 INTEGER
数据类型。
设置默认日期和时区
在某些情况下,我们需要为表中的某个列设置一个默认的日期值,并考虑时区的影响。SQLite 提供了几种方式来设置默认日期,并且可以支持时区相关的操作。
使用默认值约束
SQLite 允许我们使用默认值约束来设置列的默认日期值。默认值约束是在创建表时为列设置默认值的一种方式。下面是一个示例代码:
CREATE TABLE events (
id INTEGER PRIMARY KEY,
name TEXT,
date TEXT DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))
);
在上述示例中,我们创建了一个名为 events
的表,其中包含 id
、name
和 date
三个列。date
列的默认值被设置为当前日期和时间,格式为 YYYY-MM-DD HH:MM:SS
。
值得注意的是,SQLite 中并没有专门的日期类型,我们可以使用 TEXT
数据类型来存储日期时间。为了获得当前的日期和时间,我们使用了内置函数 strftime()
,并传递了 now
和 localtime
作为参数。
使用触发器
除了使用默认值约束外,我们还可以使用触发器来实现类似的功能。触发器是一种在表上定义的特殊的存储过程。下面是一个示例代码:
CREATE TABLE events (
id INTEGER PRIMARY KEY,
name TEXT,
date TEXT
);
CREATE TRIGGER set_default_date
AFTER INSERT ON events
BEGIN
UPDATE events SET date = (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))
WHERE id = new.id;
END;
在上述示例中,我们首先创建了一个名为 events
的表,与前面示例相同。然后,我们创建了一个名为 set_default_date
的触发器,它会在向 events
表插入数据后执行。
触发器中的 SQL 语句会更新刚刚插入的记录的 date
列,将其设置为当前的日期和时间。
示例代码运行结果
让我们通过一段示例代码来演示上述的创建表和设置默认日期时区的方法:
import sqlite3
# 连接到 SQLite 数据库
conn = sqlite3.connect('mydatabase.db')
# 创建一个指向数据库的游标
cursor = conn.cursor()
# 创建 users 表
cursor.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
)
''')
# 创建 events 表
cursor.execute('''
CREATE TABLE events (
id INTEGER PRIMARY KEY,
name TEXT,
date TEXT DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))
)
''')
# 插入一条用户记录
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('John Doe', 30))
# 插入一条事件记录
cursor.execute("INSERT INTO events (name) VALUES (?)", ('Event 1',))
# 提交事务
conn.commit()
# 关闭游标和数据库连接
cursor.close()
conn.close()
上述示例代码使用 Python 的 SQLite3 模块连接到 SQLite 数据库,并执行了创建表和插入数据的操作。在插入用户记录时,没有指定年龄,默认为 NULL
。而在插入事件记录时,日期被自动设置为当前的日期和时间。
总结
通过本文的介绍,我们了解了如何使用 SQLite 创建表,并设置默认日期和时区。我们可以使用默认值约束或触发器来实现这一功能。SQLite 提供了简单灵活的方式来处理日期时间,并支持时区相关的操作。