You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建SQLite单表时触发sqlite3.OperationalError语法错误求助

问题分析:SQLite建表报错sqlite3.OperationalError: near "TEXT": syntax error

问题描述

执行SQLite建表命令时,platform_thresholds和dev_protocol表可正常创建,但diag_input表创建时抛出错误:sqlite3.OperationalError: near "TEXT": syntax error。

相关建表语句如下:

正常执行的建表语句

-- platform_thresholds表
CREATE TABLE IF NOT EXISTS platform_thresholds (
    id integer PRIMARY KEY,                                              
    platform TEXT , 
    protocol TEXT , 
    threshold TEXT , 
    value TEXT
);

-- dev_protocol表
CREATE TABLE IF NOT EXISTS dev_protocol (
    id integer PRIMARY KEY, 
    dev_ip TEXT , 
    dev_platform TEXT , 
    protocol TEXT , 
    param TEXT , 
    value TEXT
);

报错的建表语句

CREATE TABLE IF NOT EXISTS diag_input (
    id integer PRIMARY KEY,  
    dev_ip TEXT , 
    dev_platform TEXT , 
    check TEXT , 
    protocol TEXT , 
    diagnostics TEXT
);

原因分析

报错的核心原因是**check是SQLite的保留关键字**。SQLite在解析建表语句时,会将check识别为SQL语法的一部分(用于定义CHECK约束),而非列名,导致后续的TEXT无法被正确解析,从而触发语法错误。

解决方案

有两种可行的解决方式:

方式1:重命名列名

将check替换为非保留关键字的列名,比如check_item、check_type等:

CREATE TABLE IF NOT EXISTS diag_input (
    id integer PRIMARY KEY,  
    dev_ip TEXT , 
    dev_platform TEXT , 
    check_item TEXT , 
    protocol TEXT , 
    diagnostics TEXT
);

方式2:用标识符包裹保留字

如果必须使用check作为列名,可以用双引号(SQL标准)或方括号(兼容MySQL风格)将其包裹,明确告诉SQLite这是一个列名:

-- 双引号方式(推荐,符合SQL标准)
CREATE TABLE IF NOT EXISTS diag_input (
    id integer PRIMARY KEY,  
    dev_ip TEXT , 
    dev_platform TEXT , 
    "check" TEXT , 
    protocol TEXT , 
    diagnostics TEXT
);

-- 方括号方式
CREATE TABLE IF NOT EXISTS diag_input (
    id integer PRIMARY KEY,  
    dev_ip TEXT , 
    dev_platform TEXT , 
    [check] TEXT , 
    protocol TEXT , 
    diagnostics TEXT
);

内容的提问来源于stack exchange,提问作者Ulysses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:15:27