Python 需要自动增加值,但为什么?
我正在尝试使用python将一些数据插入MySQL表。根据我的理解,当您将数据插入到具有自动递增列的表中时,不需要给出所述列的值。但是,我遇到了一个问题,我没有足够的值来插入数据。我做错了什么?我看过这个网站,w3schools,MySQL文档,看起来我做的一切都是对的。我收到错误:Python 需要自动增加值,但为什么?,python,mysql,Python,Mysql,我正在尝试使用python将一些数据插入MySQL表。根据我的理解,当您将数据插入到具有自动递增列的表中时,不需要给出所述列的值。但是,我遇到了一个问题,我没有足够的值来插入数据。我做错了什么?我看过这个网站,w3schools,MySQL文档,看起来我做的一切都是对的。我收到错误:mysql.connector.errors.DataError:1136(21S01):列计数与第1行的值计数不匹配 ... HAND_HISTORY_DB_TABLES['Hands'] = ( &quo
mysql.connector.errors.DataError:1136(21S01):列计数与第1行的值计数不匹配
...
HAND_HISTORY_DB_TABLES['Hands'] = (
"CREATE TABLE `Hands` ("
" `HandID` int NOT NULL AUTO_INCREMENT PRIMARY KEY,"
" `HandNumber` int UNIQUE,"
" `HandDate` date NOT NULL,"
" `HandResults` float"
") ENGINE=InnoDB")
...
hand_insert = "INSERT INTO Hands "\
"SELECT %s, %s, %s " \
"FROM Hands " \
"WHERE NOT EXISTS " \
"(SELECT NULL, HandNumber, HandDate, HandResults " \
"FROM Hands " \
"WHERE HandNumber = %s AND HandDate = %s AND HandResults = %s)"
cursor.execute(hand_insert, (self.hand_number, self.date, self.result,
self.hand_number, self.date, self.result))
...
将原始问题还原为下面的答案解决了问题。注释中建议的解决方案是显式写入目标表的列名。因此:
...
HAND_HISTORY_DB_TABLES['Hands'] = (
"CREATE TABLE `Hands` ("
" `HandID` int NOT NULL AUTO_INCREMENT PRIMARY KEY,"
" `HandNumber` int UNIQUE,"
" `HandDate` date NOT NULL,"
" `HandResults` float"
") ENGINE=InnoDB")
...
hand_insert = "INSERT INTO Hands (HandNumber, HandDate, HandResults) "\
"SELECT %s, %s, %s " \
"FROM Hands " \
"WHERE NOT EXISTS " \
"(SELECT NULL, HandNumber, HandDate, HandResults " \
"FROM Hands " \
"WHERE HandNumber = %s AND HandDate = %s AND HandResults = %s)"
cursor.execute(hand_insert, (self.hand_number, self.date, self.result,
self.hand_number, self.date, self.result))
...
上一次尝试失败,因为
Hands
表有4列HandID、HandNumber、HandDate、HandResults
。用插入手选择…
,您直接告诉查询插入表中的所有4列Hands
,但是在SELECT..
语句之后,您在insert
中选择的字段只有3个。指定要用insert子句填充的显式列:insert into Hands(HandNumber、HandDate、HandResults)…
如果不这样做,查询将对所有列都有期望。或者,让插入保持原样,您可以使用select:select NULL、HandNumber、HandDate、HandResults…
What@PaulT添加NULL。另外,您的SELECT
似乎缺少了一个FROM
子句……尝试了您的两个建议后,我仍然收到相同的错误或错误,声称我没有使用足够的参数。Nick说,第一个SELECT缺少一个FROM
子句。。。如果您没有为INSERT指定列名列表,是否有其他表要检查数据不存在的位置?“。。。值或插入。。。选择,表中每列的值都必须由值列表提供,'-在mysql中,您也可以通过提供值覆盖自动增量