限制输入 SQLite3 的字符数

Posted

技术标签:

【中文标题】限制输入 SQLite3 的字符数【英文标题】:Restriciting Number of Characters entered into SQLite3 【发布时间】:2019-04-13 19:36:40 【问题描述】:

我正在尝试创建一个包含以下字段的 SQL 数据库:

connection= sqlite3.connect('Main Database')
crsr = connection.cursor()
#Creates a table for the teacher data if no table is found on the system
crsr.execute("""CREATE TABLE IF NOT EXISTS Teacher_Table(Teacher_ID INTEGER PRIMARY KEY,
                    TFirst_Name VARCHAR(25) NOT NULL,
                    TLast_Name VARCHAR (25) NOT NULL,
                    Gender CHAR(1) NOT NULL,
                    Home_Address VARCHAR (50) NOT NULL,
                    Contact_Number VARCHAR (14) NOT NULL);""")
connection.commit()
connection.close()

但是当我输入值时,性别字段接受多个值 Database View

如何确保它只接受该字段的一个字符

【问题讨论】:

SqlLite 忽略长度约束sqlite.org/datatype3.html 如果尝试插入多个字符,您希望发生什么:出错或静默截断为一个字符? 【参考方案1】:

如何确保它只接受该字段的一个字符

SQLite 检查类型级别定义的长度约束,如documentation on types 中所指定:

(...) 请注意,类型名称后面的括号中的数字参数(例如:“VARCHAR(255)”)会被 SQLite 忽略 - SQLite 会不对字符串、BLOB 或数值的长度施加任何长度限制(除了大的全局 SQLITE_MAX_LENGTH 限制)。

所以您不能在数据库级别强制执行此操作。因此,您需要通过您的视图等来强制执行此操作。

但是,我们可以像@Ilja Everilä 所说的那样,使用CHECK 约束:

CREATE TABLE IF NOT EXISTS Teacher_Table(
    Teacher_ID INTEGER PRIMARY KEY,
    TFirst_Name VARCHAR(25) NOT NULL,
    TLast_Name VARCHAR (25) NOT NULL,
    Gender CHAR(1) NOT NULL CHECK (length(Gender) < 2),
    Home_Address VARCHAR (50) NOT NULL,
    Contact_Number VARCHAR (14) NOT NULL
)

【讨论】:

@IljaEverilä:是的,很有趣,mysql 忽略了CHECK,使得“SQL 格局”变得非常混乱:s。

以上是关于限制输入 SQLite3 的字符数的主要内容,如果未能解决你的问题,请参考以下文章

为啥字符串不等于 sqlite3 数据库中的文本值(Python)

如何提高sqlite3的访问效率

重置 SQLite3/MySQL 中的行数计数

SQLite3深入浅出

SQLite3笔记

Python sqlite3 SQL查询获取具有最新日期但每个唯一列限制的所有条目