#python #c #sqlite
#python #c #sqlite
Вопрос:
У меня возникла проблема при попытке перенести программу с Python на C. В Python я смог сохранить «Временную метку», а в C мне пришлось использовать ТЕКСТ, чтобы заставить ее работать. Но теперь, когда я выполняю поиск между заданной датой, он просто бесконечно повторяется. Я думаю, что это проблема с временной меткой по сравнению с текстом? База данных выглядит корректно, кроме этого?
Оба поиска выглядят следующим образом:
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(amp;now));
printf("%sn",TimeStamp);
char *sql = "INSERT INTO PLCValues VALUES(null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
int rc = sqlite3_prepare_v2(db, sql, -1, amp;res, 0);
if (rc == SQLITE_OK ) {
//Bind the variables
sqlite3_bind_text(res, 1, TimeStamp, -1, SQLITE_TRANSIENT);
Ответ №1:
Похоже, это устранило проблему.
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)";
Комментарии:
1. да, это проблема SQL, а не проблема Python или C.