智能体需要一个 SQL 函数时,先约定NULL意味着什么。缺失文本不能被自动换成“未知”后参与匹配,否则查询可能产生原数据没有的值。
为智能体查询提供受控SQL函数的开发者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

核对SQL函数的空值语义前,先定规则
示例normalize_code只对已有字符串做strip和upper,None保持None。它不执行网络,也不读取配置。
函数由开发者固定注册,AI只允许建议调用既有函数名。不能把模型生成代码动态eval成数据库函数。
是否声明deterministic取决于同样输入是否始终同样输出。本例无外部状态,符合这个前提;时间或随机函数不能照搬。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
注册固定normalize_code(s):None返回None,文本strip.upper;拒绝其它类型。SQL查询同时测试含空格文本、NULL和空字符串。不能把NULL填UNKNOWN,不允许模型定义任意Python函数。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
import sqlite3
def normalize_code(value):
if value is None: return None
if not isinstance(value,str): raise ValueError('需要文本')
return value.strip().upper()
db=sqlite3.connect(':memory:')
db.create_function('normalize_code',1,normalize_code,deterministic=True)
result=db.execute('select normalize_code(?),normalize_code(?),normalize_code(?)',(' ab ',None,'')).fetchone()
assert result==('AB',None,'')
print('results',result)
print('null_preserved',result[1] is None)
怎样判断结果符合要求
三个结果依次AB、NULL对应的None、空字符串。空字符串与缺失值分开,不能在展示时都当“没有数据”。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
results ('AB', None, '')
null_preserved True
数据库函数可能被每行调用,性能与异常会影响整个查询;先测小表再扩范围。
SQL内部值类型与Python输入类型经过适配,真实字段类型需要核对。
哪些失败必须停下来处理
本例大小写转换不提供所有语言的业务编码规范,特别是Unicode大小写可能改变长度。
deterministic不是安全标记,不证明函数没有副作用,开发者必须审查实现。
接入自己的任务前再核对一次
只暴露已批准、无外部副作用的函数名单,模型建议未知函数时明确失败。
保存函数版本与查询结果对照,函数规则修改后重跑原数据样本。
资料与适用范围
Connection.create_function注册SQL标量函数,None可对应SQL NULL。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 AI 生成 SQL 怎么用?从表结构写出查询,再在 SQLite 中验证。本文的重点是核对SQL函数的空值语义,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33421.html