J'ai un script python qui lit les fichiers texte brut dans une base de données sqlite.Échapper des caractères dans Python et sqlite
J'utilise re.escape (titre) pour ajouter des caractères d'échappement dans les chaînes pour les sécuriser avant d'exécuter les insertions.
Pourquoi ça marche pas:
In [16]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='\'Allo\ \'Allo\!\"\ \(1982\)'")
--------------------------------------------------------------------------- OperationalError Traceback (most recent call last)
/home/rajat/Dropbox/amdb/<ipython console> in <module>()
OperationalError: near "Allo": syntax error
Pourtant, cela fonctionne (enlevé \ » en deux endroits):
In [17]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='Allo\ Allo\!\"\ \(1982\)'") Out[17]: <sqlite3.Cursor object at 0x9666e90>
Je ne peux pas comprendre. Je ne peux pas non plus laisser tomber ces citations principales parce qu'elles font réellement partie du titre de film. Merci.
absolument. les citations et les échappements sont des kludges de dernière ressource. si les paramètres sont disponibles, utilisez-les _always_ – Javier
BTW, la même idée fonctionne aussi bien pour presque toutes les autres bases de données valant le nom là-bas aussi, et dans pratiquement tous les autres langages de programmation pratique. * Tout le monde * le fait de cette façon parce que c'est * juste *. –
Génial, merci Donal. Tout fonctionne bien maintenant. J'avais utilisé des méthodes similaires avec RoR, où il est bien documenté. Mais les heures de recherche de "caractères d'échappement python sqlite" n'ont rien donné. Les docs python laissent beaucoup à désirer.Merci Donal et tout –