【发布时间】:2020-12-09 20:28:20
【问题描述】:
我收到一个错误,我为 userID_fk 和目标使用了不正确的整数值。对于具有整数作为数据类型的值,如果将其更改为 text 或 varchar,则会出现错误,它将表明已创建站点并且 siteID 将增加,但不会包含其他数据。我希望用户输入他们的用户名,使其与其用户 ID 匹配,并使用 Tkinter 通过 python 插入 userID_fk。
下面是我的用户和网站表的结构
用户:
CREATE TABLE `users` (
`userID` int(255) NOT NULL AUTO_INCREMENT,
`userName` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
`userPassword` varchar(225) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
`Name` varchar(255) NOT NULL,
`phoneNum` text NOT NULL,
`email` varchar(230) NOT NULL,
`region` text NOT NULL,
`accessLevel` int(10) NOT NULL,
PRIMARY KEY (`userID`)
) ENGINE=InnoDB AUTO_INCREMENT=10002 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
网站:
CREATE TABLE `sites` (
`siteID` int(225) NOT NULL AUTO_INCREMENT,
`siteName` text CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
`userID_fk` int(255) NOT NULL,
`region` text NOT NULL,
`risklevel` text NOT NULL,
`siteType` text NOT NULL,
`target` int(225) NOT NULL,
PRIMARY KEY (`siteID`),
KEY `userID_fk` (`userID_fk`),
CONSTRAINT `sites_ibfk_1` FOREIGN KEY (`userID_fk`) REFERENCES `users` (`userID`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
将站点插入站点表的 Python 代码:
def register_site():
sitename_info = sitename2.get()
username2_info = username2.get()
region_info = region.get()
risklevel_info = risklevel.get()
sitetype_info = sitetype.get()
targetpercent_info = targetpercent.get()
# Sql code for writing the data that was written in the regsitering page.
cursor = cnn.cursor()
sitequery = "INSERT INTO `sites`(`siteID`, `siteName`, `userID_fk`, `region`, `risklevel`, `siteType`, `target`) VALUES (NULL,%s,%s,%s,%s,%s,%s)"
sitequery_vals = (sitename_info, username2_info, region_info, risklevel_info, sitetype_info, targetpercent_info)
cursor.execute(sitequery, sitequery_vals)
cnn.commit()
cursor.close()
cnn.close()
# removes the values in the entrys once the user selects that the registration was successful
sitename2_entry.delete(0, END)
region_entry.delete(0, END)
risklevel_entry.delete(0, END)
sitetype_entry.delete(0, END)
targetpercent_entry.delete(0, END)
Label(screen10, text = "Site Created", fg = "green", font = ("calibri", 11)).pack()
【问题讨论】:
-
插入时不要包含列siteID。
-
如果我不包含 siteID,我仍然会收到相同的错误...我已经声明 siteID 的值为 null 是否无关紧要?
-
为什么是
int(255),int(225)?select version();显示什么? -
真的不知道我对此很陌生,我正在为一个课程项目做这个。我试图保持数据类型与其他表中的数据相同,但即使不将它们用作整数,我仍然会收到错误。
-
siteID 是自动递增的,因此不应包含在
insert...中。您试图插入整数字段userID_fk的username2_info = username2.get()中的username2_info的值是多少?我怀疑它不是数字,而是顾名思义的字符串。