en utilisant sqlite avec python, fetchall ()


frorekable

J'essaie de comparer une liste de liens aux liks stockés dans une base de données sqlite.

en supposant que les liens dans la base de données sont:

link.com \ page1

link.com \ page2

link.com \ page3

J'ai écrit le code suivant pour chick si un lien donné existe dans la base de données et l'ajoute s'il n'existait pas.

links = ['link.com\page2', 'link.com\page4']
c.execute('SELECT link FROM ads')
previouslinks = c.fetchall()

for l in links:
    if l not in previouslinks:
        c.execute('''INSERT INTO ads(link) VALUES(?)''', (l))
        conn.commit()
    else:
        pass

le problème est que même si le lien est dans la base de données, le script ne le reconnaît pas!

lorsque j'essaye d'imprimer une previouslinksvariable, les résultats ressemblent à ceci:

[('link.com\page1',), ('link.com\page2',), ('link.com\page3',)]

Je pense que le problème vient des parenthèses et virgules supplémentaires, mais je ne suis pas tout à fait sûr.

CL.

fetchall()renvoie une liste de lignes, où chaque ligne est un tuple contenant toutes les valeurs de colonne. Un tuple contenant une chaîne n'est pas le même que la chaîne.

Vous devez extraire les valeurs des lignes (et vous n'en avez pas besoin fetchall()lors de l'itération sur un curseur):

previouslinks = [row[0] for row in c]

Articles connexes