[Python] delimitatori testo in sqlite
Daniele Varrazzo
piro a develer.com
Ven 5 Nov 2010 12:21:29 CET
On Fri, 5 Nov 2010 09:33:08 +0100, Massimo Capanni
<massimo.capanni a gmail.com> wrote:
> forse e' una sciocchezza ma faccio lo stesso questa domanda:
> sto cercando di implementare un semplice database con Sqlite,
> e sto facendo alcune prove a mano direttamente con Sqlite stesso.
>
> Il database di prova contiene una tabella del genere:
>
> pippo (a integer primary key autoincrement, b text, c text);
>
> Cerco di inserire del testo a caso da qualche testo ma, se
> nella copia sono presenti doppi apici o singoli apici Sqlite
> mi comunica che non è correttamente identato. Secondo
> voi dovrei implementare un controllo dell'identazione degli
> apici prima dell'inserimento, con una funzione Python,
> oppure esiste una funzione che automaticamente risolve
> questo problema durante l'input?
Certo che esiste! E se provi a quotare a mano le stringhe, arriva la
fatina dell'SQL... e ti spezza le ditina! :)
cursor.execute() prende due argomenti: la stringa sql con dei segnaposto
(in sqlite sono dei "?") e una sequenza di variabili: *ci pensa lui* a
metterle insieme e a gestirsi gli apici.
>>> cur.execute("SELECT ?, ?;", (42, "l'apostrofo")).fetchone()
(42, u"l'apostrofo")
Letture fondamentali prima di fare qualunque cosa con i database in
python:
* la DB-API, comune a tutti i moduli database python di qualche rilevanza
http://www.python.org/dev/peps/pep-0249/
* http://en.wikipedia.org/wiki/SQL_injection
* http://xkcd.com/327/
Nella doc di psycopg ci sono più dettagli su perché la fatina dell'SQL si
arrabbia (ti ho già detto che è pelosa?):
<http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries>.
Fai le dovute differenze perché psycopg usa "%s" invece di "?" come
segnaposto.
A presto!
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python