使用输入使用 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, size 和 type 是字符串,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的乱码解决