Выберите (не все параметры были использованы в операторе SQL) - PullRequest
0 голосов
/ 19 апреля 2019

Привет, у меня проблема с моим кодом. Я хотел проверить дубликат идентификатора внутри конвейера process_item, если дубликат идентификатора отсутствует, я вставлю элементы в таблицу

вот мой код

def process_item(self, item, spider):
    if isinstance(item, GPHM):
        t = (item['hm_title'],)
        rows_affected = self.curr.execute('SELECT 
COUNT(hm_articode) from saleitems_hm WHERE hm_articode=?', t)
        rows_affected = self.curr.rowcount

        if rows_affected > 1:
            global item_countHM 
            item_countHM += 1
            self.store_db(item)
    return item


def store_db(self, item):
    self.curr.execute("""insert into saleitems_hm values (%s, %s, %s, %s, %s, %s)""", (
            item['1'],
            item['2'],
            item['3'],
            item['4'],
            item['5'],
            item['6']
        ))
    self.conn.commit()

Любая идея, пожалуйста?

1 Ответ

2 голосов
/ 19 апреля 2019

Оператор SELECT count(*) FROM TBL WHERE в SQL возвращает только 1 строку, то есть количество всех строк в наборе результатов. Теперь просмотрите эту часть кода:

rows_affected = self.curr.execute('SELECT 
COUNT(hm_articode) from saleitems_hm WHERE hm_articode=?', t)
rows_affected = self.curr.rowcount

if rows_affected > 1:
    global item_countHM 
    item_countHM += 1
    self.store_db(item)

rowcount возвращает затронутое количество строк, которое в этом случае будет 1 или -1. Row_affered никогда не будет больше единицы, и код в условии if никогда не будет выполнен. Вы можете использовать fetchone , чтобы получить фактический счет. Проверьте код ниже:

r = self.curr.fetchone('SELECT 
COUNT(hm_articode) from saleitems_hm WHERE hm_articode= %s', t)
is_duplicate = r[0] > 1

if not is_duplicate:
    global item_countHM 
    item_countHM += 1
    self.store_db(item)

Обратите внимание, что если условие изменилось, вы хотите вставить записи без дубликатов. Count(*) больше 1 для дубликатов записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...