SQlite Python和C中的时间戳差异

问题描述 投票:0回答:1

当我尝试将程序从Python迁移到C时,我遇到了问题。在Python中,我能够存储“时间戳”,而在C中,我必须使用TEXT才能使其工作。但是现在当我在给定日期之间搜索时,它只是无休止地循环。我认为这是时间戳与文本的问题?数据库看起来不正确吗?

两个搜索看起来像:

SELECT timestamp, df1 FROM PLCValues where timestamp BETWEEN '2019-02-25 18:42:50' AND '2019-03-04 18:42:50'

Python我写的创建一个表

cur.execute("CREATE TABLE IF NOT EXISTS PLCValues(ID INTEGER PRIMARY KEY AUTOINCREMENT, [timestamp] timestamp, \
    x001 NUMERIC, x002 NUMERIC, x003 NUMERIC, x004 NUMERIC, x005 NUMERIC, x006 NUMERIC, x007 NUMERIC, x008 NUMERIC,\
    y001 NUMERIC, y002 NUMERIC, y003 NUMERIC, y004 NUMERIC, y005 NUMERIC, y006 NUMERIC,\
    x201 NUMERIC, x202 NUMERIC, x203 NUMERIC, x204 NUMERIC, x205 NUMERIC, x206 NUMERIC, x207 NUMERIC, x208 NUMERIC,\
    df1 REAL, df2  REAL, df3 REAL, df4 REAL)")

并填充表格

cur.execute("INSERT INTO PLCValues VALUES(null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",\
            (datetime.now(), \
            regs1[0], regs1[1], regs1[2], regs1[3], regs1[4], regs1[5], regs1[6], regs1[7],\
            regs2[0], regs2[1], regs2[2], regs2[3], regs2[4], regs2[5],\
            regs3[0], regs3[1], regs3[2], regs3[3], regs3[4], regs3[5], regs3[6], regs3[7],\
            Temp/10, Humid/10, 0, 0))

在C中我有一些不同的东西。

sql = "CREATE TABLE IF NOT EXISTS PLCValues(ID INTEGER PRIMARY KEY AUTOINCREMENT, timestamp TEXT, \
    x001 NUMERIC, x002 NUMERIC, x003 NUMERIC, x004 NUMERIC, x005 NUMERIC, x006 NUMERIC, x007 NUMERIC, x008 NUMERIC,\
    y001 NUMERIC, y002 NUMERIC, y003 NUMERIC, y004 NUMERIC, y005 NUMERIC, y006 NUMERIC,\
    x201 NUMERIC, x202 NUMERIC, x203 NUMERIC, x204 NUMERIC, x205 NUMERIC, x206 NUMERIC, x207 NUMERIC, x208 NUMERIC,\
    df1 REAL, df2  REAL, df3 REAL, df4 REAL)";

然后填充表格

strftime(TimeStamp, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));
printf("%s\n",TimeStamp);

char *sql = "INSERT INTO PLCValues VALUES(null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

int rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);

if (rc == SQLITE_OK ) {

  //Bind the variables  
    sqlite3_bind_text(res, 1, TimeStamp, -1, SQLITE_TRANSIENT);
python c sqlite
1个回答
0
投票

这似乎解决了这个问题。

sql = "CREATE TABLE IF NOT EXISTS PLCValues(ID INTEGER PRIMARY KEY AUTOINCREMENT, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, \
    x001 NUMERIC, x002 NUMERIC, x003 NUMERIC, x004 NUMERIC, x005 NUMERIC, x006 NUMERIC, x007 NUMERIC, x008 NUMERIC,\
    y001 NUMERIC, y002 NUMERIC, y003 NUMERIC, y004 NUMERIC, y005 NUMERIC, y006 NUMERIC,\
    x201 NUMERIC, x202 NUMERIC, x203 NUMERIC, x204 NUMERIC, x205 NUMERIC, x206 NUMERIC, x207 NUMERIC, x208 NUMERIC,\
    df1 REAL, df2  REAL, df3 REAL, df4 REAL)";
© www.soinside.com 2019 - 2024. All rights reserved.