def flush_redis_to_mysql(): """main method""" # USER user_gen = redis_scan_generator(r, 'user:*', re.compile("^user:[^:]*$", re.IGNORECASE)) for user_key in user_gen: # type: str try: email = user_key.rsplit(':', 1)[1] print(email) user = User(email) with DatabaseObject.my.cursor() as cur: try: print('UPDATING USER', email) if cur.execute(*get_update_statement('users', User.database_fields, user.get_data_dict(), 'user_id', user.user_id)) != 1: # User data unchanged or non-existent user_id user._modified = 0 r.delete(user_key, user_key + ":locked") except MySQLdb.IntegrityError: # unknown constraint error user._modified = 0 r.delete(user_key, user_key + ":locked") DatabaseObject.my.commit() except NotFoundException as ex: print("Deleting invalid User: "******"^user:reservations:[0-9]*$", re.IGNORECASE)) for reservation_key in reservations_gen: # type: str try: user_id = reservation_key.rsplit(':', 1)[1] try: reservations = DatabaseObject.load_and_lock_data(reservation_key, 'select 1', None, lambda x: AssertionError()) except: continue for res in reservations: # type: Reservation print("SAVING RESERVATION", res.user_id, res.spot_id) with DatabaseObject.my.cursor() as cur: try: if cur.execute(*get_insert_update_statement('reservations', Reservation.database_fields, res.get_data_dict())) != 1: # data unchanged or non-existent user_id res._modified = 0 except MySQLdb.IntegrityError: # unknown constraint error res._modified = 0 DatabaseObject.my.commit() r.delete(reservation_key, reservation_key + ":locked") except LockedException as ex: continue # PAYMENT_METHODS payments_gen = redis_scan_generator(r, 'user:payment_methods:*', re.compile("^user:payment_methods:[0-9]*$", re.IGNORECASE)) for payments_key in payments_gen: # type: str try: user_id = payments_key.rsplit(':', 1)[1] try: payments = DatabaseObject.load_and_lock_data(payments_key, 'select 1', None, lambda x: AssertionError()) except: continue for pay in payments: # type: PaymentMethod print("SAVING PAYMENT_METHOD", pay.payment_provider) with DatabaseObject.my.cursor() as cur: try: if cur.execute(*get_insert_update_statement('payment_methods', PaymentMethod.database_fields, pay.get_data_dict())) != 1: # data unchanged or non-existent user_id pay._modified = 0 except MySQLdb.IntegrityError: # unknown constraint error pay._modified = 0 DatabaseObject.my.commit() r.delete(payments_key, payments_key + ":locked") except LockedException as ex: continue