import pymysql from pymysql.cursors import DictCursor from data_dict import special_symbols, escape_list db_config = { "host": "192.168.66.101", "user": "root", "passwd": "Sxzgx1209", "port": 3306, 'database': 'scrapy' } class DbAction: def __init__(self): self.conn = pymysql.Connect(**db_config) self.cursor = self.conn.cursor(cursor=DictCursor) @staticmethod def decode_pwd(_pwd): for k, v in special_symbols.items(): if k in _pwd: _pwd = _pwd.replace(k, v) for item in escape_list: if item[0] in _pwd: _pwd = _pwd.replace(item[0], item[1]) return _pwd def get_data_by_id(self, _id): SELECT_SQL = "SELECT `id`, cate, `date`, name, unzip_pwd FROM scrapyh s WHERE s.id = %s;" self.cursor.execute(SELECT_SQL, (_id,)) result = self.cursor.fetchone() if result: result['unzip_pwd'] = self.decode_pwd(result['unzip_pwd']) return result def get_available_pwd(self): SELECT_SQL = "SELECT * FROM scrapyh_pwd sp ORDER BY sp.times DESC LIMIT 20;" # SELECT_SQL = "SELECT * FROM scrapyh_pwd;" self.cursor.execute(SELECT_SQL) result = self.cursor.fetchall() return [r['pwd'] for r in result] def insert_pwd(self, _pwd): if _pwd: SELECT_SQL = "SELECT * FROM scrapyh_pwd sp WHERE sp.pwd = %s;" self.cursor.execute(SELECT_SQL, (_pwd,)) result = self.cursor.fetchone() if not result: try: INSERT_SQL = "INSERT INTO scrapyh_pwd (pwd) VALUES (%s);" self.cursor.execute(INSERT_SQL, (_pwd,)) self.conn.commit() except Exception as e: print(e) self.conn.rollback() def update_pwd(self, _pwd): UPDATE_SQL = "UPDATE scrapyh_pwd sp SET sp.times = sp.times+1 WHERE sp.pwd = %s;" self.cursor.execute(UPDATE_SQL, (_pwd,)) self.conn.commit() def get_failed(self, _id_list): id_list_str = ', '.join(_id_list) SELECT_SQL = "SELECT `id`, url, unzip_pwd FROM scrapyh s WHERE s.id IN (%s);" self.cursor.execute(SELECT_SQL, (id_list_str,)) result = self.cursor.fetchall() if result: for r in result: print(r)