2010-10-27 8 views
0

Le code que j'ai est:MySQL erreur de syntaxe en utilisant Python pour ajouter la colonne à une table

for key in keys: 
    cursor.execute(""" 
        ALTER TABLE segment_table ADD %s VARCHAR(40) 
        """, key) 

je reçois une erreur me disant ma syntaxe est erronée. Lorsque je remplace le% s par une chaîne réelle, l'erreur de syntaxe disparaît.

for key in keys: 
    cursor.execute(""" 
        ALTER TABLE segment_table ADD myColumn VARCHAR(40) 
        """) 

Toute aide est appréciée.

Répondre

2

Ne devriez-vous pas faire le remplacement avant de l'alimenter?

query = "ALTER TABLE segment_table ADD %s VARCHAR(40)" % (key) 
cursor.execute(query) 
+0

Plus précisément, il existe un ',' où il devrait y avoir un '%'! il h. – katrielalex

+0

Je ne suis pas surpris que MySQL ne vous laisse pas créer une colonne nommée% s. – kindall

+0

Pour katrielalex: le, est correct. Je l'ai travaillé dans d'autres cas. – Wilson

2

lorsque cursor.execute() remplacer% s dans une chaîne de requête, il ajoute '' aux valeurs des arguments fournis ... donc quand vous faites

key = 'abc' 
cursor.execute(""" 
       ALTER TABLE segment_table ADD %s VARCHAR(40) 
       """, key) 

la requête exécutée est

ALTER TABLE segment_table ADD 'abc' VARCHAR(40) 

auquel MySQL renverra une erreur de syntaxe coz les noms de colonnes, les noms de table peuvent être `` mais pas « »

s o cela fonctionnera

query = "ALTER TABLE segment_table ADD %s VARCHAR(40)" % (key) 
4

Il y a un peu de confusion va ici, pour plusieurs raisons:

(1) mySQL utilise le % comme marqueur de paramètre - facilement confondu avec le % dans string % (data1, data2, etc) de Python

(2) certaines personnes semblent ne pas être conscients que les marqueurs de paramètres peuvent être utilisés que si l'expression peuvent être utilisés dans la syntaxe SQL - ce qui exclut les noms de table, les noms de colonnes, les noms de fonctions, mots-clés, etc

(3) Code-golf onelinerism

SQL requis: ALTER TABLE segment_table ADD myColumn VARCHAR(40)

L'utilisation d'un paramètre ne fonctionne pas:

key = "myColumn" 
sql = "ALTER TABLE segment_table ADD %s VARCHAR(40)" # col name not OK as parm 
cursor.execute(sql, (key,)) 

Vous devez construire une instruction SQL acceptable, en utilisant par exemple Formatage de chaîne Python:

key = "myColumn" 
sql = "ALTER TABLE segment_table ADD %s VARCHAR(40)" % key 
cursor.execute(sql) 
Questions connexes