使用 PyMySQL 时语法无效

Invalid syntax when using PyMySQL

我正在学习使用 Python 和 MySQL。相同的查询在 Mysql 和 PyMySQL 之间的工作方式不同。例如:在 MySQL 控制台中我有一个名为 "pages"

的 table
INSERT INTO pages (title,content) VALUES ("test title","test content")

这行得通。在 Python 中,我导入 PyMySQL,创建一个连接,然后键入 cursor = "cur"。当我 运行:

cur.execute("INSERT INTO pages (title,content) VALUES ("test title","test content")")

.. 引发错误:语法无效。但是当我用占位符尝试这个时:

cur.execute("insert into pages (title,content) values (%s,%s)",("test title","test content"))

那就成功了!所以我很困惑为什么相同的查询在 MySQL 中有效但在 python 中无效,这是否意味着我在使用 PyMySQL 时应该始终使用占位符?

谢谢

首先,最后一个版本(参数化 查询)应该是最受欢迎的版本,因为您根本不需要在占位符周围加上引号,让数据库驱动程序自动计算出类型转换和引号。而且,这样您就可以免受 SQL injection 攻击。

现在开始回答你的问题。 如果你想在双引号内使用双引号,你需要转义他们:

cur.execute("INSERT INTO pages (title,content) VALUES (\"test title\", \"test content\")")

或者,外单引号内双引号:

cur.execute('INSERT INTO pages (title,content) VALUES ("test title", "test content")')

在 python 中,您不能通过这样做来连接字符串

a = "foo"
b = "bar"
"Foo bar" a " baz " b 

这就是你想要做的。相反,您必须执行 "Foo bar" + a + " baz " + b。但是,如果您使用 %s,则您正在使用格式化(基于 C 的 printf 函数)并且您可以使用逗号以这种方式格式化字符串

a = "foo"
b = "bar"
"Foo bar %s baz %s" % (a, b)