\u mysql\u exceptions.programmingerror:(1064),“您的sql语法有错误;

t30tvxxf  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(617)
sql = ("INSERT INTO {0} "
               "(id, timestamp, status, priority, client, group, capacity, level, mail_id) "
               "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)".format(TABLE_NAME_MAIL))
        values = ('NULL', report['timestamp'], 'succeeded', report['priority'], c.strip(), report['group'], 'NULL', 'NULL', ref_mailid)
        cursor.execute(sql, values)
        #cursor.execute('INSERT INTO %s VALUES (NULL,"%s","%s","%s","%s","%s",NULL,NULL,"%s") ' % (TABLE_NAME_REPORT, report['timestamp'], 'succeeded', report['priority'], c.strip(), report['group'], ref_mailid))

那人评论道 cursor.execute 工作时,未注解的将抛出一个错误:
_mysql\u exceptions.programmingerror:(1064,“您的sql语法有错误;请查看与您的mysql服务器版本对应的手册,以了解使用“group,capacity,level,mail\u id)值(“null”、“2014-12-05 23:46:56”、“succeed”at line 1)附近的正确语法
'列' id “已经 AUTO_INCREMENT 为什么我会犯这个错误?

vaj7vani

vaj7vani1#

使用自动递增列时,有两个选项:
在其中插入一个值(即:覆盖自动增量)
完全不要设置列
1:
在设置值的情况下,如果要设置“null”,则列必须允许null。自动递增列很少出现这种情况,因为它会破坏它的用途。
所以这是允许的:

INSERT INTO tab (id, sometext) VALUES (10,"Hi");

2:
另一种方法(最常用)是根本不命名列:

INSERT INTO tab (sometext) VALUES ("Hi");

这将导致mysql为表中的id赋值。

imzjd6km

imzjd6km2#

group 是mysql中的保留关键字。使用反勾号转义名称

INSERT INTO {0} (id, timestamp, status, priority, client, `group`, capacity ...
                      here--------------------------------^-----^

或者最好使用不同的列名。
不要使用 'NULL' 作为参数。任意使用 NULL 不带引号或将其从查询中完全删除:

INSERT INTO {0} (timestamp, ...
                ^----------no ID

相关问题