我正在尝试使用以下字段创建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
如何确保该字段仅接受一个字符
答案 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
)