У меня есть БД с двумя таблицами в SQLite3, использующая пакет sqlite3 в python. есть таблица «датчиков», которая описывает датчики (в настоящее время более 1000 датчиков) и таблица сенсорных данных, которая содержит данные датчиков с метками времени. Я пытаюсь получить сенсорную информацию для краткого списка датчиков в диапазоне дат. Когда я запускаю запрос в SQLiteStudio, я получаю около 1200 строк, но, работая на python, я получаю None для результата. Я копирую точную инструкцию SELECT из python в SQLiteStudio для сравнения.
Вот код Python для метода, который должен возвращать результаты из оператора select:
def selectSensorDataByPAID_Dates(self,ids,dateStrs=None):
"""Selects from the sensordata table using list of ids
and a 2-item list of dates (start,end)
Default for dates is full date range
"""
rtrn=None
if dateStrs==None:
dateStrs=['2000-06-16 08:34:06',str(datetime.datetime.now())]
if len(ids)<1:
return rtrn
idslst=",".join(map(str,ids))
slctStmnt="""SELECT sensordata.id as sdid, sensordata.datetime,
sensordata.PM2_5Value,
sensordata.temp_C,
sensordata.humidity,
sensordata.barom,
sensors.PA_id,sensors.id as snsrid,sensors.label
FROM sensordata
INNER JOIN sensors ON sensordata.sensors_id=sensors.id
WHERE (sensors.PA_id in ({}))
and sensordata.datetime > '{}'
and sensordata.datetime < '{}'
ORDER BY sensordata.datetime ASC, sensors.PA_id;
""".format(idslst,dateStrs[0],dateStrs[1])
try:
self.__crsr.execute(slctStmnt).fetchone()
except DatabaseError as err:
print(err)
except Error as err:
print(err)
return rtrn
Вот результирующий оператор SELECT, который отлично работает в SQLiteStudio:
SELECT sensordata.id as sdid, sensordata.datetime,
sensordata.PM2_5Value,
sensordata.temp_C,
sensordata.humidity,
sensordata.barom,
sensors.PA_id,sensors.id as snsrid,sensors.label
FROM sensordata
INNER JOIN sensors ON sensordata.sensors_id=sensors.id
WHERE (sensors.PA_id in (8942,24347))
and sensordata.datetime > '2000-06-16 08:34:06'
and sensordata.datetime < '2019-06-07 07:16:21.101885'
ORDER BY sensordata.datetime ASC, sensors.PA_id;
Почему я получаю разные результаты от Python против SQLiteStudio ??