python - Python 和 C 中的 SQlite 时间戳差异

标签 python c sqlite

当我尝试将程序从 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);

最佳答案

这似乎已经解决了问题。

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)";

关于python - Python 和 C 中的 SQlite 时间戳差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54994668/

相关文章:

python - 列表的 python 迭代器实际上是如何工作的?

python - SQLAlchemy 错误?我不知道

c - 使用c中多维数组中的行的递归函数中的语法错误

c++ - 是否允许在同一个 Sqlite 数据库连接中启动多个事务?

sql - 比较SQLite中的两个表

python - 如何在 Pandas 中生成动态列

python - 如何向场景添加多个对象?

c - 如何使用 GDB Debugger 查看 __asm__ 内容?

c - 为什么 bss 在这种情况下有一些值(value)?

java - 使用 python-javaobj 在纯 python 中实现 java 反序列化?