[Python] Concatenazione lato DB => Rebus
Stefano Dal Pra
s.dalpra a gmail.com
Mar 20 Mar 2012 23:05:26 CET
Non so se ho capito bene cosa ti serve, ma con questo:
keys = [
("LDAP server", "Agent"),
("-LDAP-server-", "_S-"),
("Pippo'", "'pluto"),
("Pippo", None),
("Pippo", "")
]
T=[]
for a,b in keys:
print q.curs.mogrify("select trim(%s|| coalesce( '_'||%s,''
),'_');",(a,b))
q.curs.execute("select trim(%s|| coalesce( '_'||%s,'' ),'_');",(a,b))
T.append(q.curs.fetchone()[0])
print '\n'.join(T)
Ottengo:
>>> T=[]
>>> for a,b in keys:
... print q.curs.mogrify("select trim(%s|| coalesce( '_'||%s,''
),'_');",(a,b))
... q.curs.execute("select trim(%s|| coalesce( '_'||%s,''
),'_');",(a,b))
... T.append(q.curs.fetchone()[0])
...
select trim('LDAP server'|| coalesce( '_'||'Agent','' ),'_');
select trim('-LDAP-server-'|| coalesce( '_'||'_S-','' ),'_');
select trim('Pippo'''|| coalesce( '_'||'''pluto','' ),'_');
select trim('Pippo'|| coalesce( '_'||NULL,'' ),'_');
select trim('Pippo'|| coalesce( '_'||'','' ),'_');
>>> print '\n'.join(T)
LDAP server_Agent
-LDAP-server-__S-
Pippo'_'pluto
Pippo
Pippo
Ciao
Stefano
2012/3/20 Simone Federici <s.federici a gmail.com>
> Dato queste coppie di chiavi
>
> keys = [
> ("LDAP server", "Agent"),
> ("-LDAP-server-", "_S-"),
> ("Pippo'", "'pluto"),
> ("Pippo", NULL)
> ("Pippo", "")
> ]
>
> tramite SQL:
>
> - PGSQL quote_literal(column1) || '_' ||quote_literal(column2)
> - SQLITE quote(col1) || '_' || quote(col2)
> - ORACLE ''''||replace(col1, '''', '''''')||'''_'''||replace(col2,
> '''', '''''')||''''
> - MYSQL concat('''', replace(coalesce(column1, ''), '''', ''''''),
> '''_''', replace(coalesce(column2, ''), '''', ''''''), '''')
>
> otterrei questo:
>
> - 'LDAP server'_'Agent'
> - '-LDAP-server-'_'_S-'
> - 'Pippo'''_'''pluto'
> - 'Pippo'_''
> - 'Pippo'_'' shoud be => 'Pippo'_
>
>
> *c'è da capire come fare a differenziare gli ultimi 2 casi, con NULL o
> stringa vuota*
>
> Devo definire lato DB una funzione di concatenazione cross database che
> posso anche replicare in python.
>
> in python è facile però santa miseria in ANSI SQL non si può fare un
> cavolo :-)
>
> la risposta che dovrò farvi dopo la vostra prima domanda è:
> La devo fare anche non in python perché mi serve su DB, questioni di
> performance joins tra tabelle.
> Altrimenti dovrei prendere tutti gli id di tutta la tabella A,
> concatenarli e passarli alla query successiva sulla tabella B.
>
>
> spiegazione lunga -> potete non leggerla e aiutarmi comunque a risolvere
> il problema :-)
> è per la risoluzione di un problema per le chiavi composte per django, in
> relazione alle sue generic relations, dove django va a scrivere la chiave
> (content_id), essendo una app che deve andare bene per tetti i modelli
> (guarda ad esempio il log dell'admin), deve funzionare anche con i modelli
> che hanno una chiave composta, quindi cosa ci scrivo dentro il content_id,
> qualcosa che mi concateni le parti delle chiavi e che però sia calcolabile
> anche con SQL per inserirlo nelle join tra le tabelle.
> https://github.com/simone/django-compositekey<https://github.com/simone/django-compositekey>
>
> grazie
> S
>
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120320/de514674/attachment-0001.html>
Maggiori informazioni sulla lista
Python