Трубопровод Scrapy запрашивает не все аргументы, преобразованные во время форматирования строки

1

Привет, я пытаюсь вставить в postgresql, используя scrapy.

Я пытаюсь вставить данные в несколько столбцов в 1 базу данных с 1 паук

Код для вставки в 1 таблицу работал, но когда я менял свою базу данных, требовалось вставить несколько таблиц.

Код для запроса конвейера, который я переписал, и теперь он возвращает "не все аргументы, преобразованные во время форматирования строки", когда я пытаюсь запустить мой паук

Я знаю, что что-то не так с моим запросом с использованием "% s" в python, но я не могу понять, как решить или изменить запрос.

Вот мой pipelines.py:

import psycopg2
class TutorialPipeline(object):
    def open_spider(self, spider):
        hostname = 'localhost'
        username = 'postgres'
        password = '123' # your password
        database = 'discount'
        self.connection = psycopg2.connect(host=hostname, user=username, password=password, dbname=database)
        self.cur = self.connection.cursor()

    def close_spider(self, spider):
        self.cur.close()
        self.connection.close()

    def process_item(self, item, spider):
        self.cur.execute("insert into discount(product_name,product_price,product_old_price,product_link,product_image) values(%s,%s,%s,%s,%s)",(item['product_name'],item['product_price'],item['product_old_price'],item['product_link'],item['product_image']))
        self.cur.execute("insert into categories(name) values(%s)",(item['category_name']))
        self.cur.execute("insert into website(site) values(%s)",(item['product_site']))
        self.connection.commit()
        return item

РЕДАКТИРОВАТЬ: ЗДЕСЬ ОШИБКИ ТРАСЕКА

self.cur.execute("insert into values (name) values (% s)", (item ['category_name'])) TypeError: не все аргументы, преобразованные во время форматирования строки

Теги:
scrapy
psycopg2

1 ответ

1
Лучший ответ

Используйте именованные аргументы. Упрощенный пример:

def process_item(self, item, spider):
    self.cur.execute('''
        insert into discount(product_name, product_price) 
        values(%(product_name)s, %(product_price)s)''',
        item)
    self.cur.execute('''
        insert into categories(name) 
        values(%(category_name)s)''',
        item)
    self.cur.execute('''
        insert into website(site) 
        values(%(product_site)s)''',
        item)
    self.connection.commit()
    return item

Подробнее о передаче параметров SQL-запросам.

  • 0
    О, это полезная ссылка. Спасибо, это сработало сейчас :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню