选择(在SQL语句中未使用所有参数)

时间:2019-04-19 03:28:40

标签: python mysql web-scraping scrapy

嗨,我的代码有问题,我想检查管道process_item中的重复ID,如果没有重复的ID,我会将项目插入表格中

这是我的代码

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 个答案:

答案 0 :(得分:2)

SQL中的SELECT count(*) FROM TBL WHERE语句仅返回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_affected永远不会大于1,并且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。