[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