我如何创建表mingyan
。
CREATE TABLE `mingyan` (
`tag` varchar(10) DEFAULT NULL,
`cont` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
据说字符串格式函数{}
比占位符%
更像Python。
在我的斗志旺盛中把一些字段写入表mingyan
中。
self.cursor.execute("insert into mingyan(tag, cont) values (%s, %s)",(item['tag'],item['cont']))
它在我的scrappy中工作得很好,现在我用字符串格式函数替换占位符的方式。
self.cursor.execute("insert into mingyan(tag, cont) values ({},{})".format(item['tag'],item['cont']))
Scrapy收到错误信息
pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax;
为什么不能在pymysql中用格式函数替换占位符?
文件中的项目。
项目含义
3条答案
按热度按时间kcwpcxri1#
简而言之:
cursor.execute
中实现的参数替换与Python字符串格式不同,尽管使用了“%s”作为占位符;这就是为什么你会得到不同的结果。数据库期望查询参数以特定的方式被引用--用单引号或双引号,甚至是反引号--Python的DBAPI standard提供了参数替换功能,以自动化冗长且容易出错的参数引用过程。
实现DBAPI标准的数据库驱动程序包自动将正确的引用规则应用于查询参数。
驱动程序将使用此VALUES子句生成sql:
请注意
None
已转换为NULL,且未加引号使用字符串格式而不是DBAPI参数替换意味着您需要自己了解并应用这些规则,例如:
请注意格式占位符周围的引号。
MySQL的报价规则将在此question的答案中详细讨论。
mwecs4sa2#
我总是做以下事情
gijlo24d3#
就像在文档中一样:https://pymysql.readthedocs.io/en/latest/modules/cursors.html#pymysql.cursors.Cursor.execute
如果args是列表或元组,则%s可用作查询中的占位符。如果args是字典,则%(name)s可用作查询中的占位符。