[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