Advertisement
juneba

portalrenovaveis_criandoendindividual

Feb 15th, 2017
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.41 KB | None | 0 0
  1. import pymysql.cursors
  2.  
  3. ## ta configurado pra classe providers.
  4. connection = pymysql.connect(host='localhost',
  5.                              user='root',
  6.                              port=3306,
  7.                              password='admin',
  8.                              db='testeDB',
  9.                              charset='utf8mb4',
  10.                              cursorclass=pymysql.cursors.DictCursor)
  11.  
  12.  
  13. class Provider:
  14.     id = 0
  15.     idaux = []
  16.     nome = ""
  17.     situacao = ""
  18.     link = ""
  19.     email = ""
  20.     portfolio = ""
  21.     busca = ""
  22.     enderecos = []
  23.     energias = []
  24.     createdAt = ""
  25.     updatedAt = ""
  26.  
  27.     def __init__(self, id, nome, situacao, link, email, portifolio
  28.                  , busca, createdAt, updateAt, idaux=None, enderecos=None, energias=None):
  29.         self.id = id
  30.         self.nome = nome
  31.         self.situacao = situacao
  32.         self.link = link
  33.         self.email = str(email)
  34.         self.portifolio = portifolio
  35.         self.busca = busca
  36.         self.createdAt = createdAt
  37.         self.updatedAt = updateAt
  38.         if (idaux == None):
  39.             self.idaux = []
  40.         if (enderecos == None):
  41.             self.enderecos = []
  42.         if (energias == None):
  43.             self.energias = []
  44.  
  45.  
  46. def presente(atual, lista):
  47.     for membro in lista:
  48.         if (atual == membro.nome):
  49.             return True
  50.     return False
  51.  
  52.  
  53. ## funcao percorre lista e retorna data.
  54.  
  55. def returndata(id):
  56.     with connection.cursor() as cursor:
  57.         sql = "select created_at from provider where id = %s"
  58.         cursor.execute(sql, (id))
  59.         timestamp = cursor.fetchone()
  60.         print("ID: ", id, timestamp)
  61.         return timestamp['created_at']
  62.  
  63. def returnEmail(id):
  64.     with connection.cursor() as cursor:
  65.         sql = "select email from provider where id = %s"
  66.         cursor.execute(sql,(id))
  67.         email = cursor.fetchone()
  68.  
  69.         return email['email']
  70. try:
  71.     with connection.cursor() as cursor:
  72.  
  73.         sql = "select * from provider  order by name "  # salva tabela provider
  74.         cursor.execute(sql)
  75.         select = list(cursor.fetchall())
  76.         sql2 = "select * from provider_energy_type "  # salva tabela energy_type
  77.         cursor.execute(sql2)
  78.         provider_energy_type = list(cursor.fetchall())
  79.         enderecos = "select * from provider_address"  # le os enderecos nXn
  80.         cursor.execute(enderecos)
  81.         provider_address = list(cursor.fetchall())
  82.         select_tabela_enderecos = "select * from address "  # le a tabela completa de enderecos
  83.         cursor.execute(select_tabela_enderecos)
  84.         tabela_enderecos = list(cursor.fetchall())
  85.  
  86.         # for n in select:
  87.         #     print(n['name'],n['id'])
  88.         ## agora tenho que percorrer o select, salvar o primeiro sem ser repetido e salvar o id dos próximos.
  89.         finalInsert = []
  90.         for atual in select:
  91.  
  92.             if (presente(atual['name'], finalInsert) == False):
  93.                 aux = Provider(atual['id'],
  94.                                atual['name'],
  95.                                atual['status'],
  96.                                atual['link'],
  97.                                atual['email'],
  98.                                atual['portfolio'],
  99.                                atual['search'],
  100.                                atual['created_at'],
  101.                                atual['updated_at'])
  102.                 finalInsert.append(aux)
  103.         # regista os ids que vao ser desconsiderados
  104.         for registro in finalInsert:
  105.             for auxiliar in select:
  106.                 if (registro.nome == auxiliar['name']):
  107.                     if (registro.id != auxiliar['id']):
  108.                         registro.idaux.append(auxiliar['id'])
  109.  
  110.         print(len(finalInsert))  # debug
  111.  
  112.         # debug tabela energia.
  113.         # for n in provider_energy_type:
  114.         #    print (n)
  115.  
  116.         ##insere as energias.
  117.         for entry in finalInsert:
  118.             for aux_energy in provider_energy_type:
  119.                 if entry.id == aux_energy['provider_id']:
  120.                     entry.energias.append(aux_energy['energy_type_id'])
  121.                 elif aux_energy['provider_id'] in entry.idaux:
  122.                     if (aux_energy['energy_type_id'] not in entry.energias):
  123.                         entry.energias.append(aux_energy['energy_type_id'])
  124.             auxiliardenovo = set(entry.energias)
  125.             entry.energias = list((auxiliardenovo))
  126.  
  127.         # enderecos insere eles na lista de enderecos
  128.         for entry in finalInsert:
  129.             for aux_address in provider_address:
  130.                 if (entry.id == aux_address['provider_id']):
  131.                     entry.enderecos.append(aux_address['address_id'])
  132.                 elif aux_address[
  133.                     'provider_id'] in entry.idaux:  # SE a posicao atual da lista de enderecos for igual a algum dos ids da lista auxiliar de ids.
  134.                     if (aux_address['address_id'] not in entry.enderecos):
  135.                         entry.enderecos.append(aux_address['address_id'])
  136.             auxiliardenovo = set(entry.enderecos)
  137.             entry.enderecos = list(auxiliardenovo)
  138.  
  139.         ##definir ID certo.
  140.         for entry in finalInsert:
  141.             auxiliares = []
  142.             for auxiliar in entry.idaux:
  143.                 print(returndata(entry.id), ">", returndata(auxiliar))
  144.                 if (returndata(entry.id) > returndata(auxiliar)):
  145.                     # print("sim")
  146.                     auxiliares.append(auxiliar)
  147.                 else:
  148.                     # print("nao")
  149.                     auxiliares.append(entry.id)
  150.                     entry.id = auxiliar
  151.                     # print(entry.id)
  152.             auxiliardenovo = set(auxiliares)
  153.             entry.idaux = list(auxiliardenovo)
  154.  
  155.         #copiar email dos que não possuem.
  156.         # for entry in finalInsert:
  157.         #     if entry.email.strip() == "":
  158.         #         for aux in entry.idaux:
  159.         #             if returnEmail(aux).strip() != "":
  160.         #                 entry.email = returnEmail(aux)
  161.  
  162.         #nos casos em que há mais de um endereço, remove os enderecos genericos , definir os enderecos ali embaixo
  163.         countdoisenderecos = 0
  164.         countumendereco = 0
  165.         for entry in finalInsert:
  166.             for aux in  finalInsert:
  167.                 if (len(entry.enderecos) > 1):
  168.                     if (865 in entry.enderecos):
  169.                         entry.enderecos.remove(865)
  170.                         countdoisenderecos+=1
  171.                 if (len(entry.enderecos) == 1):
  172.                     if (865 in entry.enderecos):
  173.                         sql = "select max(id) from address"
  174.                         cursor.execute(sql)
  175.                         var = cursor.fetchone()
  176.                         maxAddress = var['max(id)'] + 1 # coloca o nome
  177.  
  178.                         countumendereco+=1
  179.                         city = ""
  180.                         neighborhood = ""
  181.                         postal_code = ""
  182.                         number = ""
  183.                         phone = ""
  184.                         carga = "carga" + str(maxAddress)
  185.                         sql = "INSERT INTO address (id,country_id,address,city,neighborhood, postal_code,number,phone) VALUES (%s ,%s ,%s ,%s,%s,%s,%s,%s)"
  186.                         cursor.execute(sql, (maxAddress, 1, carga, city, neighborhood, postal_code, number, number))
  187.                         connection.commit()
  188.                         entry.enderecos.append(maxAddress)
  189.                         entry.enderecos.remove(865)
  190.  
  191.         ## debug
  192.  
  193.         for n in finalInsert:
  194.             print(n.nome, n.id, end=" ")
  195.             for aux in n.idaux:
  196.                 print(aux, end=" ")
  197.             print(n.energias)
  198.             print(n.enderecos, end="")
  199.             print("\n")
  200.  
  201.         print("um endereco", countumendereco)
  202.         print("dois enderecos", countdoisenderecos)
  203.  
  204.         # switch pra rodar os sql que deletam os dados repetidos na tabela provider e criam novas conexoes
  205.         # na tabela provider_type_energy.
  206.  
  207.         if (True):
  208.             # deleta os ids repetidos.
  209.             for entry in finalInsert:
  210.                 for membro in entry.idaux:
  211.                     sql3 = "update provider set status='I' where id = %s"
  212.                     cursor.execute(sql3, (membro))
  213.             # cria os ids em provider_type.
  214.  
  215.             prepare = "delete from provider_energy_type"
  216.             cursor.execute(prepare)
  217.             connection.commit()
  218.  
  219.             for entry in finalInsert:
  220.                 for teste in entry.energias:
  221.                     sql4 = "insert into provider_energy_type (provider_id,energy_type_id) values(%s,%s)"
  222.                     cursor.execute(sql4, (entry.id, teste))
  223.                     connection.commit()
  224.  
  225.             prepare = "delete from provider_address"
  226.             cursor.execute(prepare)
  227.             connection.commit()
  228.  
  229.             # insere na tabela provider_address
  230.             for entry in finalInsert:
  231.                 for teste in entry.enderecos:
  232.                     insere_endereco = "insert into provider_address(provider_id,address_id) values(%s,%s)"
  233.                     cursor.execute(insere_endereco, (entry.id, teste))
  234.                     connection.commit()
  235.  
  236.             for entry in finalInsert:
  237.                 atribuiA = "update provider set status='A' where id = %s"
  238.                 cursor.execute(atribuiA, entry.id)
  239.                 connection.commit()
  240.  
  241.  
  242.  
  243. finally:
  244.     connection.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement