如果items定义的字段名与MySQL的字段名一致,在pipielines的xxxPipeline.insert_db中,则可以使用以下代码统一处理
# 插入数据
def insert_db(self, item):
"""
如果数据库的列名与items一致,则可以用该方法统一处理
:param item:
:return:
"""
if isinstance(item, FashionSpiderItem):
table_name = '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.db_cur.execute(sql)
self.db_conn.commit()