Scrapyを使用して、Web サイトのコンテンツをAPIを複製するItemsに解析しています。dict
import scrapy
class ScheduleItem(scrapy.Item):
flight = scrapy.Field()
MySQLCursor.execute()
上記のアイテムを、 pyformat スタイルの値を使用してコネクタ/Python ステートメントのデータとして直接使用しようとしています。ただし、次のエラーで落ちています。
(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
挿入する値は 1 つだけで、アイテムには値が 1 つだけあり、どちらも同じキーを使用しているため、このエラーには困惑しています。( Source code here、これは実際に TypeError を隠していることを示しています。) 普通の古い dict を使用すると、正常に動作します。
(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)
上記は実際に私の問題を適切に解決するほど単純ですが、アイテムを使用するだけで何が問題なのかまだ知りません。Python 2.7.5、Scrapy 0.24 (最新の安定版)。