Условный INSERT INTO на основе выходных данных функции - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь вставить строку в зависимости от вывода пользовательской функции. Прямо сейчас мой код выглядит следующим образом.

sql = """INSERT INTO mols (m)
VALUES (mol_from_smiles(%s));"""
cursor.execute(sql, mol_smiles)

mol_from_smiles - это функция, определенная в расширении картриджа RDKit Postge SQL, если это имеет значение. SQL запросов выполняются с использованием psycopg2 в Python. Проблема с этим кодом в том, что функция может возвращать нуль, что нарушает ограничение не ноль. Поэтому мне нужно проверить на пустоту перед вставкой. Как правильно это сделать?

1 Ответ

1 голос
/ 08 марта 2020

Вы можете использовать on conflict ignore или просто отметить insert:

INSERT INTO mols (m)
    SELECT v.m
    FROM (VALUES (mol_from_smiles(XXX))) v(m)
    WHERE v.m IS NOT NULL;
...