SQL 建表智能体生成了表结构后,要用不合法数据试插入。字段看起来齐全并不能证明主键、非空与取值范围已实现。
让AI根据契约生成建表SQL的开发者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

验证建表SQL的约束前,先定规则
契约是记录ID非空且唯一,count为非负整数。SQLite普通类型亲和性并不自动提供严格整数校验,本例用typeof(count)=integer明确约束。
CHECK与NULL的交互需要单独检查,因此count同时设置NOT NULL,不能只写count>=0。
全部在内存库测试,不修改现有项目表。真实迁移还需要备份与调用方兼容验证。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
根据契约生成SQLite建表:id TEXT NOT NULL PRIMARY KEY,count严格非负整数且NOT NULL。正常1条成功,重复ID、NULL count、负数、浮点count均拒绝。每次失败后核对行数没有新增。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
import sqlite3
db=sqlite3.connect(':memory:')
db.execute("create table items(id text not null primary key, count integer not null check(typeof(count)='integer' and count>=0))")
db.execute('insert into items values(?,?)',('a',1));db.commit()
bad=[('a',2),('b',None),('c',-1),('d',1.5)]
for row in bad:
try:
with db: db.execute('insert into items values(?,?)',row)
except sqlite3.IntegrityError: print('rejected',row)
else: raise AssertionError('非法记录被写入')
assert db.execute('select count(*) from items').fetchone()[0]==1
print('remaining_rows',1)
怎样判断结果符合要求
四组非法输入全部拒绝,表内仍只有最初1行。约束错误必须明确失败,不能在AI汇报里计为“部分成功”。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
rejected ('a', 2)
rejected ('b', None)
rejected ('c', -1)
rejected ('d', 1.5)
remaining_rows 1
SQLite可能进行类型亲和转换,例如整数形式字符串转换后按integer存储,若必须拒绝原始字符串类型,还需入口校验。
声明INTEGER与采用严格数据入口是不同层,按项目环境规定选择。
哪些失败必须停下来处理
已有表若用CREATE TABLE IF NOT EXISTS,不会因新SQL修改旧约束,必须检查真实schema。
其它数据库的类型与NULL语义需要按各自官方文档核对。
接入自己的任务前再核对一次
把每条业务约束配一条正常与失败输入,作为建表迁移的回归。
AI只根据已确认契约生成SQL,不替你确定允许状态、主键归属或删除策略。
资料与适用范围
SQLite支持PRIMARY KEY、NOT NULL与CHECK;CHECK遇到NULL需结合NOT NULL定义。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 AI 生成 SQL 怎么用?从表结构写出查询,再在 SQLite 中验证。本文的重点是验证建表SQL的约束,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33418.html