Python操作MariaDB插入数据报错:SQL语法问题求助
解决Python向MariaDB插入数据的SQL语法错误
嘿,我一眼就发现你问题的根源啦!从错误日志里的提示near 'stron)VALUES ('12345678','wertvfdg','3','1243','213')'就能看出来,问题出在你的列名ilosc stron上——SQL中带空格的列名必须用反引号(`)包裹,不然数据库会把它当成两个独立的标识符,从而抛出语法错误。
错误原因分析
你写的列名ilosc stron包含空格,MariaDB无法直接识别这种带空格的标识符,必须用反引号将整个列名括起来,才能让数据库正确解析这个列的名称。
修正后的代码示例
第一种写法修正:
# 给带空格的列名加上反引号 insert = ("INSERT INTO ksiazka (ISBN, tytul, autor, rok_wydania, `ilosc stron`)" "VALUES (%s,%s,%s,%s,%s)") dane = (ISBN, tytul, autor, rok_wydania, ilosc_stron) cursor.execute(insert, dane) # 别忘了提交事务!否则数据不会真正写入数据库 conn.commit()
第二种写法修正:
cursor.execute( "INSERT INTO ksiazka (ISBN, tytul, autor, rok_wydania, `ilosc stron`) VALUES (%s,%s,%s,%s,%s)", (ISBN, tytul, autor, rok_wydania, ilosc_stron) ) # 提交事务,确保数据持久化 conn.commit()
额外注意事项
- 事务提交:执行插入、更新、删除这类写操作后,一定要调用
conn.commit()(conn是你的数据库连接对象),默认情况下MariaDB不会自动提交事务,跳过这一步数据不会真正存入数据库。 - 变量校验:确保
ISBN、tytul等变量都已经被正确赋值,且数据类型和数据库表中对应的列类型匹配(比如rok_wydania如果是整数类型,变量值不能是字符串)。 - 列名规范:如果可以的话,建议后续创建表时用下划线代替空格(比如
ilosc_stron),这样能避免这类语法问题,也让代码更易读规范。
内容的提问来源于stack exchange,提问作者HyperQBE
相关产品推荐
相关产品推荐

