芝麻HTTP: Scrapy小技巧

這兩天上班接手,別人留下來的爬蟲發現一個很好玩的 SQL腳本拼接。sql

只要你的Scrapy Field字段名字和 數據庫字段的名字 同樣。那麼恭喜你你就能夠拷貝這段SQL拼接腳本。進行MySQL入庫處理。數據庫

具體拼接代碼以下:ide

def process_item(self, item, spider):
        if isinstance(item, WhoscoredNewItem):
            table_name = item.pop('table_name')
            col_str = ''
            row_str = ''
            for key in item.keys():
                col_str = col_str + " " + key + ","
                row_str = "{}'{}',".format(row_str, item[key] if "'" not in item[key] else item[key].replace("'", "\\'"))
                sql = "insert INTO {} ({}) VALUES ({}) ON DUPLICATE KEY UPDATE ".format(table_name, col_str[1:-1], row_str[:-1])
            for (key, value) in six.iteritems(item):
                sql += "{} = '{}', ".format(key, value if "'" not in value else value.replace("'", "\\'"))
            sql = sql[:-2]
            self.cursor.execute(sql) #執行SQL
            self.cnx.commit()# 寫入操做

這個SQL拼接實現了,若是數據庫存在相同數據則 更新,不存在則插入 的SQL語句code

具體實現就是第一個for循環,獲取key做爲MySQL字段名字、VALUES作爲SQL的VALUES(拼接成一個插入的SQL語句)orm

第二個for循環,實現了 字段名 = VALUES的拼接。it

和第一個for循環的中的sql就組成了 insert into  XXXXX   on duplicate key update 這個。存在則更新 不存在則插入的SQL語句。for循環

相關文章
相關標籤/搜索