mysql_sync_psql.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # encoding: utf-8
  2. import sys
  3. import pymysql.cursors
  4. import psycopg2
  5. import time
  6. reload(sys)
  7. sys.setdefaultencoding('utf-8')
  8. def mysql_connect(host, db, user, password):
  9. try:
  10. mysql_conn = pymysql.connect(host=host,
  11. user=user,
  12. password=password,
  13. db=db,
  14. charset='utf8mb4',
  15. cursorclass=pymysql.cursors.DictCursor)
  16. return mysql_conn
  17. except:
  18. print('连接mysql失败!')
  19. pass
  20. def postgres_connect(host, port, db, user, password):
  21. try:
  22. postgres_conn = psycopg2.connect(database=db, user=user, password=password, host=host, port=port)
  23. return postgres_conn
  24. except:
  25. print('连接Postgres失败!')
  26. pass
  27. if __name__ == '__main__':
  28. # 获取postgres连接
  29. postgres_conn = postgres_connect('127.0.0.1', '5432', 'nwaycc', 'postgres', 'Nway2017')
  30. # 获取mysql连接
  31. mysql_conn = mysql_connect('47.94.228.245', 'swdz_crm', 'dbuser', 'BXhKw6JRxMy9FTb2')
  32. ip = '172.31.20.133'
  33. # try:
  34. # 从mysql获取需要导入的电话号码
  35. mysql_cur = mysql_conn.cursor()
  36. mysql_sql_select = "SELECT phone,id from call_list WHERE sync = 0 and ip = '" + ip + "' "
  37. mysql_cur.execute(mysql_sql_select)
  38. nums = mysql_cur.fetchall()
  39. postgres_cur = postgres_conn.cursor()
  40. group_name = time.strftime('%Y-%m-%d', time.localtime(time.time()))
  41. # 生成号码组
  42. if nums:
  43. #检查号码组是否存在,不存在则新建
  44. psql_select_group = "Select id from ai_number_group where group_name = '" + group_name + "'"
  45. postgres_cur.execute(psql_select_group)
  46. group_id = postgres_cur.fetchone()
  47. if (group_id == None):
  48. psql_insert_group = "INSERT INTO ai_number_group(group_name, own_id) VALUES ('" + group_name + "', 1) RETURNING id"
  49. postgres_cur.execute(psql_insert_group)
  50. postgres_conn.commit()
  51. group_id = postgres_cur.fetchone()[0]
  52. else:
  53. group_id = group_id[0]
  54. # 插入号码
  55. for num in nums:
  56. # 检查号码是否已经导入
  57. psql_select_num = "SELECT id from ai_numbers WHERE dst_number = '" + num['phone'] + "' "
  58. postgres_cur.execute(psql_select_num)
  59. rows = postgres_cur.fetchone()
  60. if (rows):
  61. num_id = rows[0]
  62. else:
  63. # 插入号码到ai_numbers
  64. psql_insert_num = "INSERT INTO ai_numbers(dst_number) VALUES ('" + num['phone'] + "') RETURNING id"
  65. postgres_cur.execute(psql_insert_num)
  66. postgres_conn.commit()
  67. num_id = postgres_cur.fetchone()[0]
  68. # 将导入的号码添加到号码组
  69. psql_insert_group_map = "INSERT INTO ai_number_group_map(group_id, number_id, has_called) VALUES ('" + str(
  70. group_id) + "', '" + str(num_id) + "', 0)"
  71. postgres_cur.execute(psql_insert_group_map)
  72. postgres_conn.commit()
  73. # 更新mysql中该号码状态
  74. mysql_sql_update = "UPDATE call_list SET sync=1 WHERE id= %s"
  75. mysql_cur.execute(mysql_sql_update % (num['id']))
  76. mysql_conn.commit()
  77. mysql_conn.close()
  78. postgres_conn.close()
  79. # except:
  80. # print "Error: insert data error"
  81. # pass