Advertisement
Guest User

Untitled

a guest
May 14th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.14 KB | None | 0 0
  1. import datetime as dt
  2.  
  3. import sqlalchemy
  4. from sqlalchemy import create_engine, text
  5.  
  6. USER = ''
  7. PASSWORD = ''
  8.  
  9. DATE_GTE = dt.date(2010, 4, 7)
  10. DATE_LT = dt.date(2017, 1, 1)
  11.  
  12. engine = create_engine(
  13.     'mysql://{}:{}@172.16.200.96:3306/a1lite?charset=utf8&autocommit=true'
  14.     .format(USER, PASSWORD),
  15.     echo=False
  16. )
  17.  
  18. # TODO удалить inboxx
  19.  
  20. TABLES = [
  21.     ('a1lite.a1payment', 'a1lite_tr_id'),
  22.     ('a1lite.currency_inbox', 'inbox_id'),
  23.     ('a1lite.gate_callback', 'transaction_id'),
  24.     ('a1lite.gate_messages', 'transaction_id'),
  25.     ('a1lite.inbox_beeline_mc', 'external_id'),
  26.     ('a1lite.inbox_obank_mc', 'external_id'),
  27.     ('a1lite.inbox_telecom_mc', 'external_id'),
  28.     ('a1lite.inbox_params', 'inbox_id'),
  29.     ('a1lite.inbox_status_history', 'transaction_id'),
  30.     ('a1lite.income_dupe_protection', 'inbox_id'),
  31.     ('a1lite.transaction2parameter', 'transaction_id'),
  32.     ('a1lite.inbox', 'id'),
  33. ]
  34.  
  35.  
  36. def iter_days(date_gte, date_lt):
  37.     day = date_gte
  38.     while day < date_lt:
  39.         next_day = day + dt.timedelta(days=1)
  40.         yield day, next_day
  41.         day = next_day
  42.  
  43.  
  44. def delete_from_tables(tids):
  45.     for table, key in TABLES:
  46.         sql = text(
  47.             """
  48.            delete from {} where {} in :tids
  49.            """.format(table, key)
  50.         )
  51.         r = engine.execute(sql, tids=tids)
  52.         print (table, 'deleted', r.rowcount)
  53.         # result = engine.execute(sql, tids=tids)
  54.         # for row in result:
  55.         #     print(table, row)
  56.  
  57.  
  58. def main():
  59.     sql = text(
  60.         """
  61.        select i.id from a1lite.inbox i
  62.        join mpconfig.mp_partner p on p.id = i.partner_id
  63.        where created BETWEEN :date_gte and :date_lt
  64.        and p.billing_id != 16
  65.        """
  66.     )
  67.     for date_gte, date_lt in iter_days(DATE_GTE, DATE_LT):
  68.         print(date_gte, date_lt, end=' ')
  69.         result = engine.execute(sql, date_gte=date_gte, date_lt=date_lt)
  70.         tids = tuple(inbox_id for inbox_id, in result)
  71.         if not tids:
  72.             print('no tids')
  73.             continue
  74.  
  75.         print('')
  76.  
  77.         delete_from_tables(tids)
  78.  
  79.  
  80. if __name__ == '__main__':
  81.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement