Python Select(并非SQL语句中使用了所有参数)

Python Select(并非SQL语句中使用了所有参数),python,mysql,web-scraping,scrapy,Python,Mysql,Web Scraping,Scrapy,您好,我的代码有问题,我想检查管道进程\u项中的重复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

您好,我的代码有问题,我想检查管道进程\u项中的重复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()
有什么想法吗

SQL中的
SELECT count(*)FROM TBL,其中
语句只返回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。受影响的行永远不会大于1,并且永远不会执行if条件下的代码。您可以使用获取实际计数。检查以下代码:

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。

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。受影响的行永远不会大于1,并且永远不会执行if条件下的代码。您可以使用获取实际计数。检查以下代码:

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。

Hi@joshi我尝试了你的代码,但仍然得到错误self.curr.execute('SELECT Count(hm\u articode))from saleitems\u hm其中hm\u articode=?',t)mysql.connector.errors.ProgrammingError:SQL语句中没有使用所有参数尝试使用%s进行字符串格式化。检查编辑过的代码。您好@joshi我尝试了您的代码,但仍然收到错误self.curr.execute('SELECT COUNT(hm_articode))from saleitems_hm WHERE hm_articode=?',t)mysql.connector.errors.ProgrammingError:SQL语句中没有使用所有参数尝试使用%s进行字符串格式化。检查编辑的代码。