gpt4 book ai didi

python - 无法使用Scrapy项作为MySQL.execute : "Wrong number of arguments during string formatting"的数据

转载 作者:行者123 更新时间:2023-11-29 12:42:07 26 4
gpt4 key购买 nike

我正在使用Scrapy将网站内容解析为 Items ,它复制 dict API:

import scrapy

class ScheduleItem(scrapy.Item):
flight = scrapy.Field()

我正在尝试直接使用上面的项目作为连接器/Python MySQLCursor.execute() 的数据使用 pyformat 样式值的语句。但是,它因以下错误而失败:

(Pdb) add_schedule_sql()
'INSERT INTO schedules (flight) VALUES (%(flight)s)'

(Pdb) foo = items.ScheduleItem();
(Pdb) foo['flight'] = 'abc'
(Pdb) foo.keys()
['flight']
(Pdb) print foo
{'flight': 'abc'}
(Pdb) self.cursor.execute(add_schedule_sql(), foo)
*** ProgrammingError: Wrong number of arguments during string formatting

只有一个值要插入,项目中也只有一个值,两者都具有相同的键,所以我对这个错误感到相当困惑。 ( Source code here ,这表明它实际上隐藏了 TypeError。)如果我使用普通的旧字典,它工作得很好:

(Pdb) bar = {'flight': 'abc'}
(Pdb) bar.keys()
['flight']
(Pdb) self.cursor.execute(add_schedule_sql(), bar)
(Pdb)

如果我将项目映射到字典中,调用也可以正常工作:

(Pdb) self.cursor.execute(add_schedule_sql(), dict(item))
(Pdb)

上面的内容足够简单,实际上足以解决我的问题,但我仍然很好奇仅使用 Item 有什么问题。 Python 2.7.5、Scrapy 0.24(最新稳定版)。

最佳答案

以下内容对我有用。因此,我们需要查看您的 ScheduleItem 实现,并且还需要所涉及库的版本号。

In [10]: class ScheduleItem(scrapy.Item):
flight = scrapy.Field()
delay = scrapy.Field()
....:

In [11]: foo = ScheduleItem()

In [12]: foo['flight'] = 'abc'

In [13]: foo
Out[13]: {'flight': 'abc'}

In [14]: "test %(flight)s str"%(foo)
Out[14]: 'test abc str'

In [15]: "test (flight) and %(flight)s str"%(foo)
Out[15]: 'test (flight) and abc str'

关于python - 无法使用Scrapy项作为MySQL.execute : "Wrong number of arguments during string formatting"的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25959498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com