2017-08-11 6 views
0

J'ai besoin d'aide pour comparer les chaînes. Je sais qu'il y a beaucoup de questions sur ce sujet mais aucune d'elles ne semble aider dans mon problème. Ce programme obtient les coordonnées de localisation en fonction de l'entrée de l'utilisateur, puis vérifie si cet emplacement est déjà dans la base de données, sinon, l'emplacement et ses coordonnées sont mis à jour là. Lorsque la table user_input dans la base de données est vide, les données sont insérées dans la base de données sans problème. Le problème réside dans la comparaison de chaîne où les emplacements existants de la base de données sont comparés avec l'entrée d'utilisateur (item == loc), même si l'enregistrement est déjà dans la base de données, le script essaye de l'insérer là. Comment faire fonctionner la comparaison? Toute l'aide est appréciée.Comparaison de chaînes de caractères Python, entrée utilisateur -> mariadb

def cordinates(address): 
      import requests 
      url="https://maps.googleapis.com/maps/api/geocode/json?address=%s" % 
      (address) 
      reply = requests.get(url).json() 
      loc = reply['results'][0]['address_components'][0]['long_name'] 
      lat = reply['results'][0]['geometry']['location']['lat'] 
     lng = reply['results'][0]['geometry']['location']['lng'] 
     return (loc,lat,lng) 

    def selecting(): 
     import pymysql 
     db = pymysql.connect('localhost','vagrant','vagrant' 
     ,database='coordinatesdb') 
     cursor = db.cursor() 
     cursor.execute('select loc from user_input;') 
     results = cursor.fetchall() 
     cursor.close() 
     return results 

    def inserting(loc, lat, lng): 
     import pymysql 
     db = pymysql.connect('localhost','vagrant','vagrant', 
     database='coordinatesdb') 
     cursor = db.cursor() 
     new_row = "insert into user_input (loc, lat, lng) values (%s, %s, %s)" 
     cursor.execute(new_row, (loc, lat, lng)) 
     db.commit() 
     cursor.close() 

    address = input('Type loc: ') 
    a=cordinates(address) 
    loc = a[0] 
    lat = a[1] 
    lng = a[2] 
    select_results = selecting() 

    if not select_results: 
    inserting(loc, lat, lng) 
    print('Inserting as table is empty') 
    exit 

def cordinates(address): 
    import requests 
    url="https://maps.googleapis.com/maps/api/geocode/json?address=%s" % (address) 
    reply = requests.get(url).json() 
    loc = reply['results'][0]['address_components'][0]['long_name'] 
    lat = reply['results'][0]['geometry']['location']['lat'] 
    lng = reply['results'][0]['geometry']['location']['lng'] 
    return (loc,lat,lng) 

def selecting(): 
    import pymysql 
    db = pymysql.connect('localhost','vagrant','vagrant' ,database='coordinatesdb') 
    cursor = db.cursor() 
    cursor.execute('select loc from user_input;') 
    results = cursor.fetchall() 
    cursor.close() 
    return results 

def inserting(loc, lat, lng): 
    import pymysql 
    db = pymysql.connect('localhost','vagrant','vagrant', 
    database='coordinatesdb') 
    cursor = db.cursor() 
    new_row = "insert into user_input (loc, lat, lng) values (%s, %s, %s)" 
    cursor.execute(new_row, (loc, lat, lng)) 
    db.commit() 
    cursor.close() 

    address = input('Type loc: ') 
    a=cordinates(address) 
    loc = a[0] 
    lat = a[1] 
    lng = a[2] 
    select_results = selecting() 

    if not select_results: 
     inserting(loc, lat, lng) 
     print('Inserting as table is empty') 
    exit 

    for item in select_results: 
     if item == loc: 
      print('Record is already in the database') 
      quit() 


    inserting(loc, lat, lng) 
    print('Inserting') 
+0

imprimez l'élément et localisez-le dans votre boucle for, voir si elles sont ce que vous pensez qu'elles devraient être. ils ne sont probablement pas – Chris

+0

Imprimé, ils ne sont pas les mêmes que vous soupçonniez, l'article est ('Helsinki',) et loc est Helsinki – zKaj

+0

Comment faire pour couper les parenthèses loin de la sortie de SQL? – zKaj

Répondre

0

Connect qu'une seule fois par programme, pas une fois par requête.