Python使用mysql.connector向MySQL插入多列数据的正确语法求助
问题原因
- 列名标识错误:MySQL中纯数字、保留关键字作为列名时,必须用反引号(
)包裹才能被识别为字段名,你直接写(1, 2, 3, 4, 5, 6)`会被MySQL判定为数值常量,不符合INSERT语法规则,是触发1064错误的核心原因。 - SQL拼接风险:你使用f字符串拼接SQL语句,不仅存在SQL注入风险,也可能因为数值中包含特殊字符(如单引号)引发二次语法错误。
修正后的代码
去掉不必要的数值转字符串操作,改用mysql.connector官方推荐的参数化查询写法:
import mysql.connector from mysql.connector import Error import random import math import time try: conn = mysql.connector.connect(host='hidden', database = 'lvad', user='hidden', password='hidden') print ("sql connected") except Error as e: print (e) cursor = conn.cursor() while True: # 不需要提前转为字符串,参数化查询会自动处理数据类型 data1 = random.random() data2 = 10 * data1 data3 = math.sin(data2) data4 = 0 data5 = 123.23432324 data6 = 0.7 # 纯数字列名用反引号包裹,值占位符用%s query = "INSERT INTO heart_data (`1`, `2`, `3`, `4`, `5`, `6`) VALUES (%s,%s,%s,%s,%s,%s)" # 参数元组作为execute的第二个传入参数 cursor.execute(query, (data1, data2, data3, data4, data5, data6)) conn.commit() print("data has been sent") print(" ") time.sleep(0.5) # 程序退出前记得关闭游标和连接,避免资源泄漏 cursor.close() conn.close()
补充说明
如果你的heart_data表实际列名不是1-6,把反引号中的内容替换为实际字段名即可正常运行。
内容的提问来源于stack exchange,提问作者kucar
相关产品推荐
相关产品推荐

