sqlite, python, apsw: проблема с параметризацией вложенного выбора

Я пытаюсь запросить некоторые данные базы данных sqlite с вложенным оператором выбора. Окончательный результат запроса должен быть ограничен предложением WHERE, поэтому я заключил в скобки «внутренний» оператор выбора, назвал его s1 и поместил вокруг него другой оператор выбора.

При использовании параметра в последнем WHERE в коде (предпоследняя строка в sql) я получаю пустой результат, как будто в таблице нет данных. Без параметра, просто предоставляя вместо этого строку «2018-12-31», он работает нормально, и я получаю 4 кортежа данных (мой ожидаемый результат). Но параметр, который я использую в предложении WHERE (:jahresEnde), я использую и в других местах выбора. Это точно то же самое. Что я делаю не так?

Вот мой код:

      sqlCommands = '''
SELECT Name, Einheit, Whg, von, bis FROM 
( 
SELECT B.Name, H.Einheit, H.ID as Whg, FkEinheit,
    CASE WHEN julianday(B.Einzug) < julianday(:jahresAnfang)
            THEN :jahresAnfang 
            ELSE B.Einzug 
        END von, 
    CASE WHEN julianday(B.Auszug) > julianday(:jahresEnde) 
            THEN :jahresEnde 
        WHEN B.Auszug == '' AND julianday(:jahresEnde) < julianday(DATE())
            THEN :jahresEnde 
        WHEN B.Auszug == '' AND julianday(:jahresEnde) > julianday(DATE())
            THEN DATE() 
        ELSE B.Auszug 
        END bis
FROM bewohner AS B INNER JOIN haus AS H 
    ON B.FkEinheit = H.ID 
WHERE julianday(bis) IS NULL 
              OR julianday(bis) >= julianday(:jahresAnfang)
) s1 
WHERE julianday(von) <= julianday(:jahresEnde)
ORDER BY FkEinheit DESC 
'''
args={
        ":jahresAnfang":'2018-01-01',
        ":jahresEnde":'2018-12-31'
}

cursor = db.cursor()
ok = cursor.execute(sqlCommands,args)

print (list(ok))

Я также пробовал другой модуль sqlite раньше: PyQt6.QtSql. С этим модулем все работало нормально, но у меня возникла другая проблема в другом месте кода. Поэтому я хотел перейти на apsw.

0 ответов

Другие вопросы по тегам