码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-01-29 11:36:44      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:commit   name   脚本   orm   color   存储   cursor   .com   pop   

这两天上班接手,别人留下来的爬虫发现一个很好玩的 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语句。

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

标签:commit   name   脚本   orm   color   存储   cursor   .com   pop   

原文地址:https://www.cnblogs.com/zhimaruanjian/p/8375940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!