utils.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import yaml
  2. from sqlalchemy import text
  3. from sqlalchemy.types import Date, INTEGER
  4. def load_config(env='test'):
  5. """ Loads the configuration file
  6. """
  7. with open('config.yaml', 'r') as f:
  8. config = yaml.load(f, Loader=yaml.FullLoader)
  9. print('loading config for env: {}'.format(env))
  10. return config[env]
  11. def truncate_target_db(conn, target_db) -> None:
  12. """ Truncates the target table
  13. """
  14. query = """
  15. SELECT count(1) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{target_db}'
  16. """.format(target_db=target_db)
  17. if conn.execute(text(query)).scalar() == 1:
  18. sql = """
  19. TRUNCATE TABLE {target_db}
  20. """.format(target_db=target_db)
  21. conn.execute(text(sql))
  22. def find_renewal_contract(conn, contract_id):
  23. query = """
  24. select crc1.id, crc1.begin_time, crc1.end_time, crc1.quite_date,
  25. crc2.id, crc2.begin_time, crc2.end_time, crc2.quite_date,
  26. crc3.id, crc3.begin_time, crc3.end_time, crc3.quite_date
  27. from yuxin_contract.cont_renter_contract crc1
  28. left join yuxin_contract.cont_renter_contract crc2 on crc2.contract_pid=crc1.id and crc2.is_delete=0 and crc2.contract_status<>4 and crc2.sign_type=2
  29. left join yuxin_contract.cont_renter_contract crc3 on crc3.contract_pid=crc2.id and crc3.is_delete=0 and crc3.contract_status<>4 and crc3.sign_type=2
  30. where crc1.is_delete=0 and crc1.contract_status<>4 and crc1.sign_type=2
  31. and crc1.contract_pid='{contract_id}'
  32. """.format(contract_id=contract_id)
  33. result = conn.execute(text(query)).fetchone()
  34. if result is None:
  35. return None
  36. if result[11] is not None:
  37. return result[11]
  38. elif result[10] is not None:
  39. return result[10]
  40. elif result[7] is not None:
  41. return result[7]
  42. elif result[6] is not None:
  43. return result[6]
  44. elif result[3] is not None:
  45. return result[3]
  46. elif result[2] is not None:
  47. return result[2]
  48. return None
  49. def update_column_comment(conn, target_db, cols):
  50. for key, value in cols.items():
  51. dtype = value[0]
  52. if dtype == Date:
  53. dtype = 'date'
  54. elif dtype == INTEGER:
  55. dtype = 'INT'
  56. conn.execute(text('alter table {target_db} modify column `{col}` {dtype} comment \'{comment}\''
  57. .format(target_db=target_db, col=key, dtype=dtype, comment=value[1])))