使用PyMySQL时语法无效

时间:2016-07-07 02:24:25

标签: mysql python-3.x pymysql

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

cursor = "cur"

这很有效。在Python中,我导入PyMySQL,我创建一个连接,然后键入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"))

..它引发了一个错误:语法无效。但是当我和占位符一起尝试时:

int X[n][m];

然后它的作品!所以我很困惑为什么同样的查询在MySQL中工作但在python中没有,这是否意味着我在使用PyMySQL时应该总是使用占位符?

由于

2 个答案:

答案 0 :(得分:1)

首先,最后一个版本(参数化查询)应该是最受欢迎的版本,因为您根本不需要在占位符周围放置引号,让数据库驱动程序找出类型转换和引号自动。并且,通过这种方式,您可以免受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")')

答案 1 :(得分:1)

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