J'obtiens comme erreur "sqlite3.OperationalError: near "?": syntax
error". Je comprends bien qu'il y a un problème avec ma requête sql,
mais je me suis inspiré de cette page
http://docs.python.org/library/sqlite3.html (troisième exemple de code).
Si je remplace ma requête par ceci :
cursor.execute("""CREATE TABLE %s (id INTEGER PRIMARY KEY ASC, nom TEXT,
age INTEGER)""" % t)
tout marche, mais justement dans la page que j'ai citée, il est dit de
ne surtout pas faire comme ça.
je comprends que l'utilisation de ? ne fonctionne pas avec les noms de table.
Il semble qu'il n'y ait un risque potentiel que si c'est l'utilisateur final qui fournit les paramêtres. Veux-tu vraiment que l'utilisateur final fournisse les noms des tables ?
@+ -- Yves
Le Sun, 08 Aug 2010 18:01:28 +0200, Francois Lafont a écrit:
Bonjour,
Tout marche, mais justement dans la page que j'ai citée, il est dit de
ne surtout pas faire comme ça.
je comprends que l'utilisation de ? ne fonctionne pas avec les noms de
table.
Il semble qu'il n'y ait un risque potentiel que si c'est l'utilisateur
final qui fournit les paramêtres.
Veux-tu vraiment que l'utilisateur final fournisse les noms des tables ?
je comprends que l'utilisation de ? ne fonctionne pas avec les noms de table.
Il semble qu'il n'y ait un risque potentiel que si c'est l'utilisateur final qui fournit les paramêtres. Veux-tu vraiment que l'utilisateur final fournisse les noms des tables ?
@+ -- Yves
Mickaël Wolff
Le 09/08/2010 02:10, yves a écrit :
Il semble qu'il n'y ait un risque potentiel que si c'est l'utilisateur final qui fournit les paramêtres. Veux-tu vraiment que l'utilisateur final fournisse les noms des tables ?
Si l'utilisateur final est le DBA, c'est un besoin pertinent ;)
Il semble qu'il n'y ait un risque potentiel que si c'est l'utilisateur
final qui fournit les paramêtres.
Veux-tu vraiment que l'utilisateur final fournisse les noms des tables ?
Si l'utilisateur final est le DBA, c'est un besoin pertinent ;)
Il semble qu'il n'y ait un risque potentiel que si c'est l'utilisateur final qui fournit les paramêtres. Veux-tu vraiment que l'utilisateur final fournisse les noms des tables ?
Si l'utilisateur final est le DBA, c'est un besoin pertinent ;)
je comprends que l'utilisation de ? ne fonctionne pas avec les noms de table.
Il semble qu'il n'y ait un risque potentiel que si c'est l'utilisateur final qui fournit les paramêtres. Veux-tu vraiment que l'utilisateur final fournisse les noms des tables ?
Je croix pour le noms de table, c'est a toi de fair l'escaping.
pour eviter l'injection de sql tu pourras creer un liste de tout les tables existantes et prendre seulement un index pour choissir la table.
pour creer une liste de tables: SELECT * FROM dbname.sqlite_master WHERE type='table'
On 08/09/2010 03:10 AM, yves wrote:
Le Sun, 08 Aug 2010 18:01:28 +0200, Francois Lafont a écrit:
Bonjour,
Tout marche, mais justement dans la page que j'ai citée, il est dit de
ne surtout pas faire comme ça.
je comprends que l'utilisation de ? ne fonctionne pas avec les noms de
table.
Il semble qu'il n'y ait un risque potentiel que si c'est l'utilisateur
final qui fournit les paramêtres.
Veux-tu vraiment que l'utilisateur final fournisse les noms des tables ?
Je croix pour le noms de table, c'est a toi de fair l'escaping.
pour eviter l'injection de sql tu pourras creer un liste de tout les
tables existantes et prendre seulement un index pour choissir la table.
pour creer une liste de tables:
SELECT * FROM dbname.sqlite_master WHERE type='table'
je comprends que l'utilisation de ? ne fonctionne pas avec les noms de table.
Il semble qu'il n'y ait un risque potentiel que si c'est l'utilisateur final qui fournit les paramêtres. Veux-tu vraiment que l'utilisateur final fournisse les noms des tables ?
Je croix pour le noms de table, c'est a toi de fair l'escaping.
pour eviter l'injection de sql tu pourras creer un liste de tout les tables existantes et prendre seulement un index pour choissir la table.
pour creer une liste de tables: SELECT * FROM dbname.sqlite_master WHERE type='table'
Francois Lafont
Merci pour vos réponses.
En fait, c'est moi qui choisis le nom de la table et pas l'utilisateur donc en effet je peux faire ceci :
cursor.execute("""CREATE TABLE %s (id INTEGER PRIMARY KEY ASC, nom TEXT, age INTEGER)""" % t)
Le nom de la base (qui n'a pas grande importance ici, mon script est une petite bidouille perso) intervient à plusieurs reprises dans le code et le formatage de chaîne est un peu lourd.
Comment fait-on en Python pour gérer les constantes magiques (comme on pourrait le faire en C avec un #define) ?
-- François Lafont
Merci pour vos réponses.
En fait, c'est moi qui choisis le nom de la table et pas l'utilisateur
donc en effet je peux faire ceci :
cursor.execute("""CREATE TABLE %s (id INTEGER PRIMARY KEY ASC, nom TEXT,
age INTEGER)""" % t)
Le nom de la base (qui n'a pas grande importance ici, mon script est une
petite bidouille perso) intervient à plusieurs reprises dans le code et
le formatage de chaîne est un peu lourd.
Comment fait-on en Python pour gérer les constantes magiques (comme on
pourrait le faire en C avec un #define) ?
En fait, c'est moi qui choisis le nom de la table et pas l'utilisateur donc en effet je peux faire ceci :
cursor.execute("""CREATE TABLE %s (id INTEGER PRIMARY KEY ASC, nom TEXT, age INTEGER)""" % t)
Le nom de la base (qui n'a pas grande importance ici, mon script est une petite bidouille perso) intervient à plusieurs reprises dans le code et le formatage de chaîne est un peu lourd.
Comment fait-on en Python pour gérer les constantes magiques (comme on pourrait le faire en C avec un #define) ?
-- François Lafont
News123
On 08/09/2010 04:25 PM, Francois Lafont wrote:
Merci pour vos réponses.
En fait, c'est moi qui choisis le nom de la table et pas l'utilisateur donc en effet je peux faire ceci :
cursor.execute("""CREATE TABLE %s (id INTEGER PRIMARY KEY ASC, nom TEXT, age INTEGER)""" % t)
Le nom de la base (qui n'a pas grande importance ici, mon script est une petite bidouille perso) intervient à plusieurs reprises dans le code et le formatage de chaîne est un peu lourd.
Comment fait-on en Python pour gérer les constantes magiques (comme on pourrait le faire en C avec un #define) ?
Pas de #define en python donc
ou au debut d'un module python
TABLE_NAME = "mytable"
CREATE_TABLE_QRY = """CREATE TABLE %s (id INTEGER PRIMARY KEY ASC, nom TEXT, age INTEGER)"""
ou definir les foncions
On 08/09/2010 04:25 PM, Francois Lafont wrote:
Merci pour vos réponses.
En fait, c'est moi qui choisis le nom de la table et pas l'utilisateur
donc en effet je peux faire ceci :
cursor.execute("""CREATE TABLE %s (id INTEGER PRIMARY KEY ASC, nom TEXT,
age INTEGER)""" % t)
Le nom de la base (qui n'a pas grande importance ici, mon script est une
petite bidouille perso) intervient à plusieurs reprises dans le code et
le formatage de chaîne est un peu lourd.
Comment fait-on en Python pour gérer les constantes magiques (comme on
pourrait le faire en C avec un #define) ?
Pas de #define en python donc
ou au debut d'un module python
TABLE_NAME = "mytable"
CREATE_TABLE_QRY = """CREATE TABLE %s (id INTEGER PRIMARY KEY ASC,
nom TEXT, age INTEGER)"""
En fait, c'est moi qui choisis le nom de la table et pas l'utilisateur donc en effet je peux faire ceci :
cursor.execute("""CREATE TABLE %s (id INTEGER PRIMARY KEY ASC, nom TEXT, age INTEGER)""" % t)
Le nom de la base (qui n'a pas grande importance ici, mon script est une petite bidouille perso) intervient à plusieurs reprises dans le code et le formatage de chaîne est un peu lourd.
Comment fait-on en Python pour gérer les constantes magiques (comme on pourrait le faire en C avec un #define) ?
Pas de #define en python donc
ou au debut d'un module python
TABLE_NAME = "mytable"
CREATE_TABLE_QRY = """CREATE TABLE %s (id INTEGER PRIMARY KEY ASC, nom TEXT, age INTEGER)"""