[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