You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

人脸识别程序中向SQLite数据库写入当前检测时间的最优方案及报错解决

解决SQLite写入当前时间的报错与最优实现

嘿,我来帮你搞定这个问题!你碰到的sqlite3.OperationalError: no such function: GETDATE报错很明确——SQLite并不支持SQL Server里的GETDATE()函数,它有自己的内置工具来获取当前时间。下面我给你讲几种靠谱的实现方式,顺便优化下你的代码(还能避免SQL注入风险):

错误原因拆解

SQLite和SQL Server是不同的数据库系统,函数体系不一样。GETDATE()是SQL Server的专属函数,SQLite不认它,所以直接用就会报错。

最优实现方案

方式1:用SQLite内置的datetime('now')直接生成时间

这是最省事的方式,让数据库自己生成当前时间,还能把你原来的两个UPDATE操作合并成一条,减少数据库交互次数:

import sqlite3
import datetime

student = getStudent(ID)
connection = sqlite3.connect(r"/Users/...../Documents/...../FaceBase.db")
# 合并更新考勤状态和时间,用?做占位符避免SQL注入
update_command = "UPDATE Class SET Attendance='Present', Time = datetime('now') WHERE ID=?"
# 把ID作为参数传递,别直接拼字符串!
cursor = connection.execute(update_command, (ID,))
connection.commit()
connection.close()

如果需要本地时间而非UTC时间,把datetime('now')改成datetime('now', 'localtime')就行。

方式2:在Python里生成时间再传入数据库

要是你想在代码层面统一处理时间(比如做时区转换、自定义格式),可以先在Python里生成时间字符串,再传给数据库:

import sqlite3
import datetime

student = getStudent(ID)
connection = sqlite3.connect(r"/Users/...../Documents/...../FaceBase.db")
# 生成你需要的时间格式,这里用常用的YYYY-MM-DD HH:MM:SS
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
update_command = "UPDATE Class SET Attendance='Present', Time = ? WHERE ID=?"
cursor = connection.execute(update_command, (current_time, ID))
connection.commit()
connection.close()

额外的优化小技巧

  • 杜绝SQL注入:千万别像之前那样直接用"WHERE ID="+str(ID)拼接SQL语句,用?作为占位符传递参数才是安全的做法,能防止恶意ID带来的注入风险。
  • 用上下文管理器管理连接:用with语句可以自动帮你处理连接的打开和关闭,还能自动提交事务(除非出错),省心又安全:
import sqlite3
import datetime

student = getStudent(ID)
db_path = r"/Users/...../Documents/...../FaceBase.db"
with sqlite3.connect(db_path) as connection:
    update_command = "UPDATE Class SET Attendance='Present', Time = datetime('now') WHERE ID=?"
    connection.execute(update_command, (ID,))
    # 不用手动commit和close,with块会自动处理

小补充:SQLite常用日期函数

除了datetime('now'),SQLite还有这些好用的日期时间函数:

  • CURRENT_TIMESTAMP:和datetime('now')效果一样,返回ISO格式的UTC时间
  • date('now'):只获取当前日期部分(比如2024-05-20)
  • time('now'):只获取当前时间部分(比如14:30:00)

内容的提问来源于stack exchange,提问作者Mace Winuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:42:38