juneba

portalrenovaveis_final

Feb 16th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.65 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 = 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.         #print("id dentro da funcao:",id)
  66.         sql = "select email from provider where id = %s"
  67.         cursor.execute(sql,(id))
  68.         email = cursor.fetchone()
  69.  
  70.         #print (email['email'])
  71.         return email['email']
  72. try:
  73.     with connection.cursor() as cursor:
  74.  
  75.         sql = "select * from provider  order by name "  # salva tabela provider
  76.         cursor.execute(sql)
  77.         select = list(cursor.fetchall())
  78.         sql2 = "select * from provider_energy_type "  # salva tabela energy_type
  79.         cursor.execute(sql2)
  80.         provider_energy_type = list(cursor.fetchall())
  81.         enderecos = "select * from provider_address"  # le os enderecos nXn
  82.         cursor.execute(enderecos)
  83.         provider_address = list(cursor.fetchall())
  84.         select_tabela_enderecos = "select * from address "  # le a tabela completa de enderecos
  85.         cursor.execute(select_tabela_enderecos)
  86.         tabela_enderecos = list(cursor.fetchall())
  87.  
  88.         # for n in select:
  89.         #     print(n['name'],n['id'])
  90.         ## agora tenho que percorrer o select, salvar o primeiro sem ser repetido e salvar o id dos próximos.
  91.         finalInsert = []
  92.         for atual in select:
  93.  
  94.             if (presente(atual['name'], finalInsert) == False):
  95.                 aux = Provider(atual['id'],
  96.                                atual['name'],
  97.                                atual['status'],
  98.                                atual['link'],
  99.                                atual['email'],
  100.                                atual['portfolio'],
  101.                                atual['search'],
  102.                                atual['created_at'],
  103.                                atual['updated_at'])
  104.                 finalInsert.append(aux)
  105.         # regista os ids que vao ser desconsiderados
  106.         for registro in finalInsert:
  107.             for auxiliar in select:
  108.                 if (registro.nome == auxiliar['name']):
  109.                     if (registro.id != auxiliar['id']):
  110.                         registro.idaux.append(auxiliar['id'])
  111.  
  112.         print(len(finalInsert))  # debug
  113.  
  114.         # debug tabela energia.
  115.         # for n in provider_energy_type:
  116.         #    print (n)
  117.  
  118.         ##insere as energias.
  119.         for entry in finalInsert:
  120.             for aux_energy in provider_energy_type:
  121.                 if entry.id == aux_energy['provider_id']:
  122.                     entry.energias.append(aux_energy['energy_type_id'])
  123.                 elif aux_energy['provider_id'] in entry.idaux:
  124.                     if (aux_energy['energy_type_id'] not in entry.energias):
  125.                         entry.energias.append(aux_energy['energy_type_id'])
  126.             auxiliardenovo = set(entry.energias)
  127.             entry.energias = list((auxiliardenovo))
  128.  
  129.         # enderecos insere eles na lista de enderecos
  130.         for entry in finalInsert:
  131.             for aux_address in provider_address:
  132.                 if (entry.id == aux_address['provider_id']):
  133.                     entry.enderecos.append(aux_address['address_id'])
  134.                 elif aux_address[
  135.                     'provider_id'] in entry.idaux:  # SE a posicao atual da lista de enderecos for igual a algum dos ids da lista auxiliar de ids.
  136.                     if (aux_address['address_id'] not in entry.enderecos):
  137.                         entry.enderecos.append(aux_address['address_id'])
  138.             auxiliardenovo = set(entry.enderecos)
  139.             entry.enderecos = list(auxiliardenovo)
  140.  
  141.         ##definir ID certo.
  142.         for entry in finalInsert:
  143.             auxiliares = []
  144.             for auxiliar in entry.idaux:
  145.                 #print(returndata(entry.id), ">", returndata(auxiliar))
  146.                 if (returndata(entry.id) > returndata(auxiliar)):
  147.                     # print("sim")
  148.                     auxiliares.append(auxiliar)
  149.                 else:
  150.                     # print("nao")
  151.                     auxiliares.append(entry.id)
  152.                     entry.id = auxiliar
  153.                     # print(entry.id)
  154.             auxiliardenovo = set(auxiliares)
  155.             entry.idaux = list(auxiliardenovo)
  156.  
  157.         for entry in finalInsert:
  158.            if (returnEmail(entry.id) == ""):
  159.                if(entry.email != ""):
  160.                    sql = "update provider set email = %s where id = %s"
  161.                    #print ("update provider set email = ", entry.email,"where id = ",entry.id)
  162.                    cursor.execute(sql,(entry.email,entry.id))
  163.                    connection.commit()
  164.  
  165.  
  166.  
  167.  
  168.         #copiar email dos que não possuem para a classe, mas ainda não dá o altertable.
  169.         for entry in finalInsert:
  170.             for aux in entry.idaux:
  171.                 #print (entry.nome,entry.id,entry.email, returnEmail(aux) , aux)
  172.                 if (entry.email == ""  and returnEmail(aux) != ""):
  173.                     sql = "update provider set email = %s where id = %s"
  174.                     print("caso 2 =update provider set email = ",returnEmail(aux),"where id = ",entry.id)
  175.                     cursor.execute(sql,(returnEmail(aux), entry.id) )
  176.                     connection.commit()
  177.  
  178.  
  179.  
  180.  
  181.         #nos casos em que há mais de um endereço, remove os enderecos genericos , definir os enderecos ali embaixo
  182.         countdoisenderecos = 0
  183.         countumendereco = 0
  184.         for entry in finalInsert:
  185.             for aux in  finalInsert:
  186.                 if (len(entry.enderecos) > 1):
  187.                     if (865 in entry.enderecos):
  188.                         entry.enderecos.remove(865)
  189.                         countdoisenderecos+=1
  190.                 if (len(entry.enderecos) == 1):
  191.                     #enderecoBrasil
  192.                     if (865 in entry.enderecos):
  193.                         sql = "select max(id) from address"
  194.                         cursor.execute(sql)
  195.                         var = cursor.fetchone()
  196.                         maxAddress = var['max(id)'] + 1 # coloca o nome
  197.                         countumendereco+=1
  198.                         city = ""
  199.                         neighborhood = ""
  200.                         postal_code = ""
  201.                         number = ""
  202.                         phone = ""
  203.                         carga = "carga" + str(maxAddress)
  204.                         sql = "INSERT INTO address (id,country_id,address,city,neighborhood, postal_code,number,phone) VALUES (%s ,%s ,%s ,%s,%s,%s,%s,%s)"
  205.                         cursor.execute(sql, (maxAddress, 1, carga, city, neighborhood, postal_code, number, number))
  206.                         connection.commit()
  207.                         entry.enderecos.append(maxAddress)
  208.                         entry.enderecos.remove(865)
  209.                     #enderecoArgentina
  210.                     if (834 in entry.enderecos):
  211.                         sql = "select max(id) from address"
  212.                         cursor.execute(sql)
  213.                         var = cursor.fetchone()
  214.                         maxAddress = var['max(id)'] + 1 # coloca o nome
  215.                         countumendereco+=1
  216.                         city = ""
  217.                         neighborhood = ""
  218.                         postal_code = ""
  219.                         number = ""
  220.                         phone = ""
  221.                         carga = "carga" + str(maxAddress)
  222.                         sql = "INSERT INTO address (id,country_id,address,city,neighborhood, postal_code,number,phone) VALUES (%s ,%s ,%s ,%s,%s,%s,%s,%s)"
  223.                         cursor.execute(sql, (maxAddress, 10, carga, city, neighborhood, postal_code, number, number))
  224.                         connection.commit()
  225.                         entry.enderecos.append(maxAddress)
  226.                         entry.enderecos.remove(834)
  227.                     #enderecolombia
  228.                     if (860 in entry.enderecos):
  229.                         sql = "select max(id) from address"
  230.                         cursor.execute(sql)
  231.                         var = cursor.fetchone()
  232.                         maxAddress = var['max(id)'] + 1 # coloca o nome
  233.                         countumendereco+=1
  234.                         city = ""
  235.                         neighborhood = ""
  236.                         postal_code = ""
  237.                         number = ""
  238.                         phone = ""
  239.                         carga = "carga" + str(maxAddress)
  240.                         sql = "INSERT INTO address (id,country_id,address,city,neighborhood, postal_code,number,phone) VALUES (%s ,%s ,%s ,%s,%s,%s,%s,%s)"
  241.                         cursor.execute(sql, (maxAddress, 9, carga, city, neighborhood, postal_code, number, number))
  242.                         connection.commit()
  243.                         entry.enderecos.append(maxAddress)
  244.                         entry.enderecos.remove(860)
  245.                     #enderecobolivia
  246.                     if (858 in entry.enderecos):
  247.                         sql = "select max(id) from address"
  248.                         cursor.execute(sql)
  249.                         var = cursor.fetchone()
  250.                         maxAddress = var['max(id)'] + 1 # coloca o nome
  251.                         countumendereco+=1
  252.                         city = ""
  253.                         neighborhood = ""
  254.                         postal_code = ""
  255.                         number = ""
  256.                         phone = ""
  257.                         carga = "carga" + str(maxAddress)
  258.                         sql = "INSERT INTO address (id,country_id,address,city,neighborhood, postal_code,number,phone) VALUES (%s ,%s ,%s ,%s,%s,%s,%s,%s)"
  259.                         cursor.execute(sql, (maxAddress, 11, carga, city, neighborhood, postal_code, number, number))
  260.                         connection.commit()
  261.                         entry.enderecos.append(maxAddress)
  262.                         entry.enderecos.remove(858)
  263.                     #enderecoChile
  264.                     if (864 in entry.enderecos):
  265.                         sql = "select max(id) from address"
  266.                         cursor.execute(sql)
  267.                         var = cursor.fetchone()
  268.                         maxAddress = var['max(id)'] + 1 # coloca o nome
  269.                         countumendereco+=1
  270.                         city = ""
  271.                         neighborhood = ""
  272.                         postal_code = ""
  273.                         number = ""
  274.                         phone = ""
  275.                         carga = "carga" + str(maxAddress)
  276.                         sql = "INSERT INTO address (id,country_id,address,city,neighborhood, postal_code,number,phone) VALUES (%s ,%s ,%s ,%s,%s,%s,%s,%s)"
  277.                         cursor.execute(sql, (maxAddress, 12, carga, city, neighborhood, postal_code, number, number))
  278.                         connection.commit()
  279.                         entry.enderecos.append(maxAddress)
  280.                         entry.enderecos.remove(864)
  281.  
  282.  
  283.         ## debug
  284.  
  285.         for n in finalInsert:
  286.             print(n.nome, n.id, end=" ")
  287.             for aux in n.idaux:
  288.                 print(aux, end=" ")
  289.             print(n.energias)
  290.             print(n.enderecos, end="")
  291.             print("\n")
  292.  
  293.         print("um endereco", countumendereco)
  294.         print("dois enderecos", countdoisenderecos)
  295.  
  296.         # switch pra rodar os sql que deletam os dados repetidos na tabela provider e criam novas conexoes
  297.         # na tabela provider_type_energy.
  298.  
  299.         if (True):
  300.             # deleta os ids repetidos.
  301.             for entry in finalInsert:
  302.                 for membro in entry.idaux:
  303.                     sql3 = "update provider set status='I' where id = %s"
  304.                     cursor.execute(sql3, (membro))
  305.             # cria os ids em provider_type.
  306.  
  307.             prepare = "delete from provider_energy_type"
  308.             cursor.execute(prepare)
  309.             connection.commit()
  310.  
  311.             for entry in finalInsert:
  312.                 for teste in entry.energias:
  313.                     sql4 = "insert into provider_energy_type (provider_id,energy_type_id) values(%s,%s)"
  314.                     cursor.execute(sql4, (entry.id, teste))
  315.                     connection.commit()
  316.  
  317.             prepare = "delete from provider_address"
  318.             cursor.execute(prepare)
  319.             connection.commit()
  320.  
  321.             sql = "select * from address"
  322.             cursor.execute(sql)
  323.             list = cursor.fetchall()
  324.             listaIDEndereco = []
  325.             for entry in list:
  326.                 listaIDEndereco.append(entry['id'])
  327.  
  328.             print(listaIDEndereco)
  329.  
  330.  
  331.             # insere na tabela provider_address
  332.             for entry in finalInsert:
  333.                 for teste in entry.enderecos:
  334.                     if(teste in listaIDEndereco):
  335.                         insere_endereco = "insert into provider_address(provider_id,address_id) values(%s,%s)"
  336.                         cursor.execute(insere_endereco, (entry.id, teste))
  337.                         connection.commit()
  338.  
  339.             for entry in finalInsert:
  340.                 atribuiA = "update provider set status='A' where id = %s"
  341.                 cursor.execute(atribuiA, entry.id)
  342.                 connection.commit()
  343.  
  344.  
  345.  
  346. finally:
  347.     connection.close()
Add Comment
Please, Sign In to add comment