Python MySQL INSERT INTO表如何从不同格式的变量传递值

时间:2017-10-24 11:11:28

标签: python mysql insert

我想在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))

感谢您的帮助,您的回答为我提供了继续寻找的方式。

4 个答案:

答案 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()来丢弃自上次提交以来所做的任何更改。

在关闭连接之前提交。

  1. 分贝= mysql.connect(用户= “根”,的passwd = “”,分贝= “some_db”,unix_socket = “/选择/ LAMPP的/ var / MySQL的/的mysql.sock”)
  2. 光标= db.cursor()
  3. cursor.execute(“插入我的表......”)
  4. db.commit()

答案 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)
   )

当然不要忘记在某个时候提交你的交易......