标题说明了一切。在
具有以下创建语法的空表,只有数据库中的表。在
CREATE TABLE IF NOT EXISTS `ACME`.`Registration` (
`ConfirmationNumber` INT NOT NULL AUTO_INCREMENT,
`FirstName` VARCHAR(45) NOT NULL,
`LastName` VARCHAR(45) NOT NULL,
`CompanyName` VARCHAR(100) NOT NULL,
`Title` VARCHAR(60) NOT NULL,
`Email` VARCHAR(60) NOT NULL,
`PhoneNumber` VARCHAR(20) NOT NULL,
`StreetAddress` VARCHAR(100) NOT NULL,
`City` VARCHAR(30) NOT NULL,
`Province` VARCHAR(30) NOT NULL,
`ZipCode` VARCHAR(10) NOT NULL,
`Country` VARCHAR(40) NOT NULL,
PRIMARY KEY (`ConfirmationNumber`),
UNIQUE INDEX `ConfirmationNumber_UNIQUE` (`ConfirmationNumber` ASC),
UNIQUE INDEX `Email_UNIQUE` (`Email` ASC),
UNIQUE INDEX `PhoneNumber_UNIQUE` (`PhoneNumber` ASC))
ENGINE = InnoDB
任何和所有插入都会出现此错误。在
^{pr2}$我已经尝试过为自动递增的确认号码插入0和不插入0。在
我认为这可能与我安装mysql有关,因为(Mac)system preferences面板显示服务器运行良好,但如果我试图从终端停止/启动,就会出现奇怪的错误。具体来说:
$ mysql.server stop
ERROR! MySQL server PID file could not be found!
$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/rover-231-4.rovernet.mtu.edu.pid).
不过,我知道我正在连接到正确的服务器(localhost)和数据库,因为数据确实被插入到注册表中。在
这是一个Python/MySQL/Flask->;HTML/CSS/JS堆栈,所有这些我都是新手。插入Python代码:
query_string = (
"INSERT INTO Registration "
"(FirstName, LastName, CompanyName, Title, Email, PhoneNumber, "
"StreetAddress, City, Province, ZipCode, Country) "
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);")
cursor.execute(query_string, (first_name, last_name, company, title, email, phone, address, city, state, zipcode, country))
编辑:我还应该补充一点,直到遇到安装问题,不得不重新安装,完全相同的代码运行得非常好。在
不熟悉HTML/CSS/JS。我的JS和HTML都在调用validate函数,但我没有注意到,因为这是第一次(在迄今为止的大量开发中)调用函数两次会导致错误。感谢mhawke和spencer7593为我指明了正确的方向。在
我有点冒险,但是用
IF NOT EXISTS
创建表意味着只有在表不存在的情况下才会创建。在如果表确实已经存在,并且它包含数据,例如列
Email
是a@b.com
的行,则插入操作将失败。在如果表已经存在,
CREATE TABLE
命令不会抱怨,它也不会清除现有表中的数据,因此多次运行代码很可能会产生您看到的错误。在如果你能承受丢失表的代价,那么在启动flask应用程序之前试着放弃它,看看问题是否仍然存在。如果不能丢失数据,请尝试重命名表并重新启动烧瓶应用程序:
根据显示的代码部分,我们将猜测email变量包含字符串“邮箱:a@b.com“在执行查询时。在
我建议您尝试查询表
只是想看看是否有一行返回。在
如果在表中的该列上定义了UNIQUE约束,则返回的错误是预期的结果,如果该行已经在表中,并且您尝试添加具有相同值的另一行。在
您的代码是否可能在insert语句中循环了两次(或更多次)?在
您确定您的代码正在使用相同的凭据和数据库连接到同一个MySQL服务器吗?在
另一种不太可能的情况是,在正在设置的表上定义了一个BEFORE INSERT触发器新建.电子邮件到那个字符串值。在
另一种可能是表中的损坏,特别是如果这些是MyISAM表。您可以删除该表并重新创建它。在
为了调试这个,我建议您回显/打印查询执行中引用的变量的值,特别是email变量。在
相关问题 更多 >
编程相关推荐