uploadDataToDB.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. # -*- coding: future_fstrings -*-
  2. import os
  3. import sys
  4. import zipfile
  5. import gzip
  6. import pymysql
  7. import datetime
  8. import time
  9. import shutil
  10. downloadDir = "ss_upload"
  11. dbTableName = 'snipershooting'
  12. conn = pymysql.connect(
  13. host='localhost',
  14. port=6002,
  15. user='root',
  16. passwd='root',
  17. db='devrecord',
  18. charset='utf8'
  19. )
  20. def unzip_file(zip_src, dst_dir):
  21. r = zipfile.is_zipfile(zip_src)
  22. if r:
  23. fz = zipfile.ZipFile(zip_src)
  24. #print("zip file list=",len(fz.namelist()))
  25. for file in fz.namelist():
  26. #print("zip file name=",file)
  27. fz.extract(file, dst_dir)
  28. else:
  29. print('This is not zip')
  30. def list_all_files(rootdir):
  31. _files = []
  32. if os.path.exists(rootdir):
  33. fileList = os.listdir(rootdir)
  34. for f in fileList:
  35. if f=="$RECYCLE.BIN" or f=="System Volume Information":
  36. continue
  37. path = os.path.join(rootdir, f)
  38. if os.path.isdir(path):
  39. _files.extend(list_all_files(path))
  40. if os.path.isfile(path):
  41. _files.append(path)
  42. return _files
  43. def remove_empty_dir(rootdir):
  44. if os.path.exists(rootdir):
  45. fList = os.listdir(rootdir)
  46. parentdir = os.path.dirname(rootdir)
  47. #print("parentdir=",parent)
  48. if len(fList) == 0:
  49. os.rmdir(rootdir)
  50. #print("remove dir=", rootdir)
  51. remove_empty_dir(parentdir)
  52. else:
  53. for f in fList:
  54. fname = os.path.join(rootdir, f)
  55. #print("fname=",fname)
  56. if os.path.isdir(fname):
  57. remove_empty_dir(fname)
  58. def decodeFile(filename):
  59. f_gz = gzip.open(filename, 'rb')
  60. zipData = f_gz.read()
  61. #print(zipData)
  62. params = zipData.decode('UTF-8').split('#')
  63. sql = buildSql(params)
  64. #print("sql=",sql)
  65. f_gz.close()
  66. if insertDB(sql):
  67. os.remove(filename)
  68. def buildSql(sqlParams):
  69. updateTime = datetime.datetime.fromtimestamp(int(sqlParams[1]))
  70. firstLoginTime = datetime.datetime.fromtimestamp(int(sqlParams[9]))
  71. lastLoginTime = datetime.datetime.fromtimestamp(int(sqlParams[10]))
  72. paramDict = {'userid': sqlParams[0], 'upload_time': updateTime, 'app_version':sqlParams[2], 'groupid':sqlParams[3],
  73. 'max_level':int(sqlParams[4]), 'playerScore':int(sqlParams[5]), 'playerCrown':int(sqlParams[6]),
  74. 'playerDollar':int(sqlParams[7]), 'loginCount':int(sqlParams[8]), 'first_login_time':firstLoginTime,
  75. 'last_login_time':lastLoginTime,'online_time':sqlParams[11],'app_country':sqlParams[12],'app_language':sqlParams[13],
  76. 'mobile_name':sqlParams[14], 'mobile_type':sqlParams[15], 'mobile_battery':sqlParams[16],
  77. 'mobile_screen':sqlParams[17], 'mobile_mem':sqlParams[18],'mobile_graphic_mem':sqlParams[19],
  78. "mobile_graphic_type":sqlParams[20],'network':sqlParams[21],'androidSys':sqlParams[22],
  79. 'performance':sqlParams[23],'levelResult':sqlParams[24]}
  80. sql = f"""insert into {dbTableName}
  81. (userid,client_userid,upload_time,app_version,groupid,max_level,first_login_time,last_login_time,
  82. online_time,app_country,app_language,mobile_name,mobile_type,mobile_battery,mobile_screen,mobile_mem,
  83. mobile_graphic_mem,mobile_graphic_type,network,androidSys,performance,levelResult,
  84. playerScore,playerDollar,playerCrown,loginCount)
  85. values ('{paramDict['userid']}','none','{paramDict['upload_time']}','{paramDict['app_version']}',
  86. '{paramDict['groupid']}',{paramDict['max_level']},'{paramDict['first_login_time']}','{paramDict['last_login_time']}',
  87. {paramDict['online_time']},'{paramDict['app_country']}','{paramDict['app_language']}','{paramDict['mobile_name']}',
  88. '{paramDict['mobile_type']}',{paramDict['mobile_battery']},'{paramDict['mobile_screen']}',
  89. '{paramDict['mobile_mem']}','{paramDict['mobile_graphic_mem']}','{paramDict['mobile_graphic_type']}',
  90. '{paramDict['network']}','{paramDict['androidSys']}','{paramDict['performance']}','{paramDict['levelResult']}',
  91. {paramDict['playerScore']},{paramDict['playerDollar']},{paramDict['playerCrown']},
  92. {paramDict['loginCount']})"""
  93. return sql
  94. def insertDB(sql):
  95. success = False
  96. cursor = conn.cursor()
  97. try:
  98. cursor.execute(sql)
  99. conn.commit()
  100. success = True
  101. except Exception as e:
  102. conn.rollback()
  103. print("insertDB except",str(e))
  104. finally:
  105. cursor.close()
  106. return success
  107. def queryDB():
  108. cursor = conn.cursor()
  109. sql = 'select * from snipershooting'
  110. rows = cursor.execute(sql)
  111. print(cursor.fetchmany(3))
  112. cursor.close()
  113. def main():
  114. files = list_all_files(downloadDir)
  115. for f in files:
  116. print("filename=",f)
  117. decodeFile(f)
  118. conn.close()
  119. #remove_empty_dir(downloadDir)
  120. if __name__ == '__main__':
  121. main()