Py学习  »  Python

芝麻HTTP:Scrapy小技巧-MySQL存储

芝麻HTTP代理 • 6 年前 • 786 次点击  

这两天上班接手,别人留下来的爬虫发现一个很好玩的 SQL脚本拼接。

只要你的Scrapy Field字段名字和 数据库字段的名字 一样。那么恭喜你你就可以拷贝这段SQL拼接脚本。进行MySQL入库处理。

具体拼接代码如下:

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语句

具体实现就是第一个for循环,获取key作为MySQL字段名字、VALUES做为SQL的VALUES(拼接成一个插入的SQL语句)

第二个for循环,实现了 字段名 = VALUES的拼接。

和第一个for循环的中的sql就组成了 insert into XXXXX on duplicate key update 这个。存在则更新 不存在则插入的SQL语句。

我只能所 6666666666 写这个拼接的小哥儿有想法。还挺通用。

不知道你们有没有想到这种方法 反正我是没想到。

最后一次修改于 (2017-12-15 09:25)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4648
 
786 次点击