我想在python脚本的数据库表中插入一行。列fiels值保存在不同格式的变量中:字符串,整数和浮点数。我在论坛中搜索,我尝试了不同的选项,但没有人工作
我尝试了这个选项:
cursor.execute('INSERT INTO table(device, number1, number2) VALUES (%s,%d,%f)',(device_var,number1_var, number2_var))
我也尝试过:
cursor.execute('INSERT INTO table(device, number1, number2) VALUES ({0},{1},{2})',(device_var,number1_var, number2_var))
和
cursor.execute('INSERT INTO table(device, number1, number2) VALUES ({0},{1},{2})'.format (device_var,number1_var, number2_var))
错误:操作错误:(1054,"未知列' device_var_content'在'字段列表'")
我也试过这个以查看表格中是否存在问题,但这样可以正常工作:
cursor.execute(' INSERT INTO表(device,number1,number2)VALUES(" dev1",1,2.4)'
感谢您的时间
解决:
cursor.execute('INSERT INTO table(device, number1, number2) VALUES ("{}",{},{})'.format (string_var,number1_var, number2_var))
感谢您的帮助,您的回答为我提供了继续寻找的方式。
答案 0 :(得分:1)
您可以使用参数绑定。您不必担心传递的变量的数据类型。
cursor.execute('INSERT INTO table(device, number1, number2) VALUES (?, ?, ?)', ("dev1",1,2.4))
答案 1 :(得分:0)
检查您是否在执行查询后调用commit(),或者也可以启用autocommit进行连接。
connection_obj.commit()
答案 2 :(得分:0)
首先,
cursor.execute('INSERT INTO table(device, number1, number2) VALUES (%s,%d,%f)',(device_var,number1_var, number2_var))
似乎错了。同样第二个版本也是错误的。第三, .format 是正确的。
那为什么查询没有运行? 由于以下原因:
从1.2.0开始,默认情况下,MySQLdb根据DB-API标准(PEP-249)的要求禁用自动提交。如果您使用的是InnoDB表或其他类型的事务表类型,则需要在关闭连接之前执行connection.commit(),否则您的更改都不会写入数据库。
相反,您也可以使用connection.rollback()来丢弃自上次提交以来所做的任何更改。
在关闭连接之前提交。
答案 3 :(得分:0)
列fiels值保存在不同格式的变量中:字符串,整数和浮点数。我在论坛中搜索,我尝试了不同的选项,但没有人工作
您是否阅读过db-api规范?查询中的占位符不是python格式化指令,而只是普通的占位符 - 数据库连接器将负责类型转换,转义,甚至一些清理。很遗憾,MySQLdb的作者选择了python字符串格式占位符(%s
),因为它会导致很多混乱......如果他们选择了类似"&#34这样的话会更清楚34;代替。
无论如何 - "正确的方式"写你的查询是:
cursor.execute(
'INSERT INTO table(device, number1, number2) VALUES (%s,%s,%s)',
(device_var,number1_var, number2_var)
)
当然不要忘记在某个时候提交你的交易......