这两天上班接手, 别人留下来的爬虫发现一个很好玩的 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://www.bubuko.com/infodetail-2478925.html