SQlite Разница во времени в Python и C - PullRequest
0 голосов
/ 05 марта 2019

У меня возникла проблема при попытке перенести программу из Python в C. В Python я смог сохранить «метку времени», и в CI пришлось использовать 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))

В CI пришлось немного по-другому.

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

1 Ответ

0 голосов
/ 05 марта 2019

Это, похоже, решило проблему.

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)";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...