存储单float值及时间戳到MariaDB时出现SQL语法错误的原因
问题原因及解决方案
你遇到的这个语法错误,根源出在传递参数的方式上!
在你的第二个代码片段里,执行SQL的这一行:
cursor.execute(sql,(day0))
这里的(day0)并不是一个元组——Python会把它当成普通的括号包裹变量,相当于直接传了day0这个单个值。但cursor.execute要求第二个参数必须是序列类型(比如元组、列表),当只有一个参数时,你需要给元组加个尾逗号(trailing comma)来明确告诉Python这是一个元组,不然它会解析失败,进而导致SQL语句里的%s无法正确替换,触发语法错误。
修正后的代码
把参数部分改成(day0,)就可以解决问题了:
mariadb_connection = mariadb.connect(user='user', password='pw', database='mydb') cursor = mariadb_connection.cursor() cursor.execute("CREATE TABLE IF NOT EXISTS mytable2 (ts TIMESTAMP, Day0 float(10,8))") sql ="INSERT INTO mytable2 (ts, Day0)" sql += "VALUES (NULL, %s)" cursor.execute(sql,(day0,)) # 这里加了逗号,变成正确的单个元素元组 print("Storing values into SQL database") mariadb_connection.commit() mariadb_connection.close()
补充说明
对比你第一个能正常运行的代码,(day0, day1, day2, day3, day4, day5)是多元素元组,不需要额外加逗号Python也能识别,但单个元素的元组必须加逗号——这是Python的语法特性,很容易踩坑。
内容的提问来源于stack exchange,提问作者Craver2000
相关产品推荐
相关产品推荐

