首页 > 解决方案 > 基于函数输出的条件 INSERT INTO

问题描述

我正在尝试根据自定义函数的输出插入一行。现在我的代码看起来像这样。

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

mol_from_smiles 是 RDKit PostgeSQL 插件扩展中定义的一个函数,如果它很重要的话。在 Python 中使用 psycopg2 执行 SQL 查询。此代码的问题是该函数可能返回 null,这将违反非 null 约束。因此,我需要在插入之前检查是否为空。这样做的正确方法是什么?

标签: sqlpostgresqlpsycopg2

解决方案


您可以使用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;

推荐阅读