Bonjour tout le monde, je suis face à un problème dans SQLite. En effet, je n'arrive pas à transmettre le nom de la table que j'essaie d'accéder.
Voici mon code :
def add_to_database(self):
connection = sqlite3.connect("database.db")
c = connection.cursor()
now = datetime.datetime.today()
c.execute("INSERT INTO ?(datetime, nb_co) VALUES(?, ?) ", (self.forum, now, self.recup_co()))
connection.commit()
connection.close()
sleep(5)
Quand je lance le code, l'erreur "sqlite3.OperationalError: near "?": syntax error" ressort. Etant donné que c'est la première fois que j'utilise SQLite je ne sais pas trop comment procéder et pourquoi j'ai cette erreur.
Ma question est donc : Comment résoudre le problème et/ou avez des suggestions concernant mon code ?
Voici le code en entier si ca peut en intéresser certains :
#!/usr/bin/python3
from bs4 import BeautifulSoup
from urllib.request import urlopen
from time import sleep
import sqlite3
import datetime
class Forum():
def __init__(self, forum, url_forum):
self.forum = forum
self.url_forum = url_forum
def add_to_database(self):
connection = sqlite3.connect("database.db")
c = connection.cursor()
now = datetime.datetime.today()
c.execute("INSERT INTO ?(datetime, nb_co) VALUES(?, ?) ", (self.forum, now, self.recup_co()))
connection.commit()
connection.close()
sleep(5)
def recup_co(self):
self.page_html = str(urlopen(self.url_forum).read()) # stockage du contenu de la page dans une variable
self.page = BeautifulSoup(self.page_html, 'html.parser')
self.resultat = self.page.select(".nb-connect-fofo")
self.nb_co = str(self.resultat) #stockage de la ligne avec le nombre de co
self.nb_co = self.nb_co[:-27] #modification de la ligne pour ne garder que le nb de co
self.nb_co = self.nb_co[31:]
return self.nb_co
dixhuit_vingtcinq = Forum("dixhuit_vingtcinq", "http://www.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm")
moins_quinze = Forum("moins_quinze", "http://www.jeuxvideo.com/forums/0-15-0-1-0-1-0-blabla-moins-de-15-ans.htm")
quinze_dixhuit = Forum("quinze_dixhuit", "http://www.jeuxvideo.com/forums/0-15-0-1-0-1-0-blabla-moins-de-15-ans.htm")
overwatch = Forum("overwatch", "http://www.jeuxvideo.com/forums/0-33972-0-1-0-1-0-overwatch.htm")
while(True):
dixhuit_vingtcinq.add_to_database()
moins_quinze.add_to_database()
quinze_dixhuit.add_to_database()
overwatch.add_to_database()
sleep(60)
Merci d'avoir lu jusque là et de votre potentielle aide
Bon, j'aurai dû un peu mieux chercher. De ce que j'ai lu, il n'est pas possible de transmettre une table depuis une variable directement dans le c.execute. J'ai donc palier à ce problème en "construisant la commande juste avant. Ce qui donne :
def add_to_database(self):
connection = sqlite3.connect("database.db")
c = connection.cursor()
self.now = datetime.datetime.today()
self.text = "INSERT INTO {0}(datetime, nb_co) VALUES('{1}', '{2}')".format(self.forum, self.now, self.recup_co())
print(self.text)
c.execute(self.text)
connection.commit()
connection.close()
sleep(5)
Voilà Un peu bête mais faut le savoir quoi Si vous avez des suggestions dites les moi
Merci de m'avoir lu
Je t'invite à regarder la documentation officielle (ici pour Python 3.6) pour vérifier si tu réponds bien aux normes PEP en vigueur.
https://docs.python.org/3/library/sqlite3.html