使用输入使用pymysql插入数据

时间:2017-01-25 17:44:39

标签: python mysql python-3.x pymysql

我正在使用数据库而我在使用pymysql来插入某些值时遇到了麻烦

cur.execute("""INSERT INTO orders (name, size, type, is_done) VALUES (%s, %s, %s, %s)""" 
% (name, size, type, is_done))

其中名称,大小类型是字符串, is_done 是bool

它给了我典型的错误You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near,所以我认为问题是',但我该如何解决呢?

修改

我还应该补充一点,从MySQL DB中检索名称值

3 个答案:

答案 0 :(得分:2)

当前接受的解决方案具有SQL injection漏洞。您不应该使用%运算符来格式化字符串-只需将参数的元组作为第二个参数传递,库将处理其余的参数。

cur.execute("INSERT INTO orders (name, size, type, is_done) VALUES (%s, %s, %s, %s)",
    (name, size, type, is_done))

另请参见this answerpymysql documentation

答案 1 :(得分:0)

我发现了问题,而不是

  cur.execute("""INSERT INTO orders (name, size, type, is_done) 
  VALUES (%s, %s, %s, %s)""" 
  % (name, size, type, is_done))

我应该做的

cur.execute("""INSERT INTO orders (name, size, type, is_done) 
 VALUES ("%s", "%s", "%s", "%s")""" 
% (name, size, type, is_done))

答案 2 :(得分:0)

如果您没有输入id的值。您有错误。试试这个查询。

cur.execute("insert into orders values(%s, %s, %s, %s, %s)", (None, name, size, type, is_done))

“%s”和“ None”(用于ID列)。这个查询运行我的代码。 注意:不要忘记commit()