sql - 基于函数输出的条件 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 约束。因此,我需要在插入之前检查是否为空。这样做的正确方法是什么?
解决方案
您可以使用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;
推荐阅读
- arrays - 如何在 Dart 中访问多维数组/列表中的元素
- excel - 带有组合框的 VBA Excel 中的高级过滤器
- python - 一次覆盖所有类方法来做同样的事情
- c# - grpc服务Net core 3.0中对GUID类型的支持
- java - 建立 HTTP url 连接时 Android 应用程序滞后
- python - 如何对包含列表的元组进行单元测试(断言)?
- gitlab - GITLAB web IDE change default option - create a new branch
- elasticsearch - 批量索引期间 Elastic Search 是否会锁定查询?
- python - 在python中的多维数组上映射自定义函数
- javascript - Add active class to matching label of a checkbox