Se connecter

Informatique

Programmation

Sujet : [Python] Probleme ajout de données SQLITE
1
NBKL
Niveau 10
21 juin 2017 à 10:22:07

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 :)

NBKL
Niveau 10
21 juin 2017 à 10:34:02

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à :hap: Un peu bête mais faut le savoir quoi :hap: Si vous avez des suggestions dites les moi :noel:

Merci de m'avoir lu :ok:

laugain
Niveau 11
24 juin 2017 à 00:47:26

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

1
Sujet : [Python] Probleme ajout de données SQLITE
   Retour haut de page
Consulter la version web de cette page