使用输入使用 pymysql 插入数据

Posted

技术标签:

【中文标题】使用输入使用 pymysql 插入数据【英文标题】:Insert Data with pymysql using inputs 【发布时间】:2017-06-11 00:31:51 【问题描述】:

我正在处理数据库,但在使用 pymysql 插入一些值时遇到了问题

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

name, sizetype 是字符串,is_done 是布尔值

它给了我典型的错误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 数据库中检索的

【问题讨论】:

检查真正执行了哪个查询。 ***.com/questions/7071166/…我觉得这个链接可以帮到你。 谢谢,但是我看到命令真的执行了,所以死路一条…… 那么,你能显示已执行的查询吗? @huhushow 我已经找到问题了,谢谢大家:) 【参考方案1】:

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

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

另见this answer 和pymysql documentation。

【讨论】:

【参考方案2】:

我发现了问题,而不是

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

【讨论】:

【参考方案3】:

如果您不为 id 输入值。你有一个错误。试试这个查询。

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

id 列的“%s”和“None”。此查询运行我的代码。 注意:不要忘记 commit()

【讨论】:

以上是关于使用输入使用 pymysql 插入数据的主要内容,如果未能解决你的问题,请参考以下文章

Python使用pyMysql模块插入数据到mysql的乱码解决

pymysql 插入数据

[ pymysql ] 三种插入方式的速度对比

python 插入html到数据库 re.escape() PyMysql

Python之PyMySQL的使用

插入 JSON 对象时出现 Python pymysql 语法错误