[Gfoss] PyQGIS

a.furieri a lqt.it a.furieri a lqt.it
Gio 8 Mar 2012 21:42:23 CET


On Thu, 08 Mar 2012 21:21:38 +0100, Salvatore Larosa wrote:
> CREATE TABLE (id serial, nome text);
>
> la tabella avrà due campi [id] e [nome]. Se modifichi il campo [nome] 
> e
> lo rinomini in [end] la query non viene eseguita perchè END è una
> cosiddetta reserved word per il linguaggio SQL!
>

Niet !!!
puoi usare tutte le parole riservate che credi ...
pero' le devi "infiocchettare" nel modo standad specificato dalla
sintassi universale di SQL.
N.B.: "universale", vale per sqlite, postgres, M$ access etc etc

e qua scatta un altro tipo di quoting: quello con "doppio apice",
ossia "virgolette".
qualsiasi parola racchiusa tra doppi apici non e' piu' un nome
riservato SQL, ma diventa un banalissimo nome definito dall'utente.

provare per credere:

CREATE TABLE "insert" (
   "select" INTEGER PRIMARY KEY,
   "where" DOUBLE,
   "from" TEXT,
   "join" TEXT);

vedrai che funziona perfettamente, appunto perche' qualsiasi
nome racchiuso tra (") diventa un nome utente banale.

e funziona anche questa:

INSERT INTO "insert" ("select", "where", "from", "join")
   VALUES (1, 2.5, 'alfa', 'beta');

please, nota la finezza: "doppi apici" per delimitare i NOMI,
'singoli apici' per delimitare le costanti stringa (testo).

naturalmente l'escaping per raddoppio vale anche per i doppi
apici: se mai ti venisse voglia di definire una colonna o
tavola che contiene un carattere (") al suo interno, lo devi
mascherare per raddoppio. p.es.:

ALTER TABLE "insert" RENAME TO "studenti del liceo ""giulio cesare""";

N.B.: questo dice lo standard SQL.
se pero' vuoi incapsulare queste espressioni SQL all'interno di un
qualsiasi linguaggio di programmazione, devi sommare i criteri di
escaping del tuo linguaggio con quelli di SQL.
se p.es. vuoi incapsulare il comando SQL di cui sopra in una
stringa C/C++, allora ti diventera' qualcosa come:

sql_stmt = "ALTER TABLE \"insert\" RENAME TO \"studenti del liceo 
\"\"giulio cesare\"\"\";");

in questo caso la barra (\) non c'entra proprio nulla con SQL, ma
serve a mascherare i doppi apici dentro alla stringa C/C++.

inizi a pensare che e' tutto un casino spaventoso ? yes, sei nel giusto 
:-D

ma con un po' di perseveranza, di attenzione e di pazienza alla fine se 
insisti
scoprirai che e' tutto perfettamente logico e razionale

ciao Sandro



-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



Maggiori informazioni sulla lista Gfoss