Comment insérer des chaînes avec des citations et des retours à la ligne dans sqlite db avec Python?
J'essaie d'insérer des chaînes de lire à partir d'un fichier dans un sqlite
base de données en Python. Les chaînes d'espaces (retour à la ligne, tabulations et les espaces) et ont aussi des apparitions de guillemets simples ou doubles. Voici comment j'ai essayer de le faire:
import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
# Create table
c.execute('''CREATE TABLE test
(a text, b text)''')
f = open("foo", "w")
f.write("hello\n\'world\'\n")
f.close()
testfield = open("foo").read()
# Insert a row of data
c.execute("INSERT INTO test VALUES ('%s', 'bar')" %(testfield))
# Save (commit) the changes
conn.commit()
Je trouve que cela échoue avec l'erreur:
c.execute("INSERT INTO test VALUES ('%s', 'bar')" %(testfield))
sqlite3.OperationalError: near "world": syntax error
Comment puis-je y parvenir? Ne les chaînes de caractères doivent être échappés avant l'insertion dans la base de données, et si oui, comment? merci.
OriginalL'auteur user248237dfsf | 2013-02-04
Vous devez vous connecter pour publier un commentaire.
Vous utilisez des paramètres SQL au lieu de mise en forme de chaîne:
Lors de l'utilisation de SQL paramètres de vous laisser la base de données de la bibliothèque de la poignée de la citation, et même mieux, de donner de la base de données pour optimiser la requête et la réutilisation de l'optimisation du plan de requête pour plusieurs exécutions de la même requête de base (avec des paramètres différents).
Dernier mais non le moindre, vous êtes beaucoup mieux défendu contre les attaques par injection SQL dans la base de données de la bibliothèque qui sait le mieux comment échapper dangereux de type SQL valeurs.
Pour citer le sqlite3 documentation:
Quelle est l'importance de la virgule après textfield?
Dans ce cas, le lien est venu avec la citation. 🙂
Je suis en train de faire assurer le second paramètre est un tuple avec un seul élément. Laisser la virgule et c'est juste une expression de regroupement.
Ahh, merci (encore à apprendre Python)
OriginalL'auteur Martijn Pieters