限制输入SQLite3的字符数

时间:2018-11-10 12:56:49

标签: python tkinter sqlite

我正在尝试使用以下字段创建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

如何确保该字段仅接受一个字符

1 个答案:

答案 0 :(得分:2)

  

如何确保该字段仅接受一个字符

SQLite不会检查在类型级别定义的长度约束,如here中所指定:

  

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

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

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

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
)