SQLite 是一个轻量级的嵌入式数据库引擎,广泛用于小型应用和移动设备。Python 提供了 sqlite3
模块来与 SQLite 数据库进行交互。
在数据库中,插入默认值通常是指在创建表时为某些列指定默认值。时间戳是一种常见的默认值,用于记录数据的创建或修改时间。
以下是一个示例,展示如何在 SQLite 中创建一个表,并为某列设置默认的时间戳。
import sqlite3
from datetime import datetime
# 连接到 SQLite 数据库(如果数据库不存在,则会自动创建)
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建一个表,其中 'created_at' 列设置默认值为当前时间戳
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# 插入一条记录,不指定 created_at 列的值
cursor.execute("INSERT INTO users (name) VALUES (?)", ('Alice',))
# 提交事务
conn.commit()
# 查询并打印所有记录
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 关闭连接
conn.close()
原因:SQLite 默认的时间戳格式可能与预期不符。
解决方法:可以使用 strftime
函数来格式化时间戳。
strftime('%Y-%m-%d %H:%M:%S', CURRENT_TIMESTAMP)
原因:可能是由于 SQL 语句编写错误或数据库设置问题。 解决方法:检查 SQL 语句是否正确,并确保数据库表结构中已正确设置了默认值。
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
原因:SQLite 的 CURRENT_TIMESTAMP
默认返回的是 UTC 时间。
解决方法:如果需要本地时间,可以在应用层进行转换。
from datetime import datetime, timezone
# 获取当前本地时间
local_time = datetime.now(timezone.utc).astimezone()
通过以上方法,可以有效解决在 SQLite 中插入默认时间戳时可能遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云