<br><br><div class="gmail_quote">2012/3/21 Simone Federici <span dir="ltr"><<a href="mailto:s.federici@gmail.com">s.federici@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="HOEnZb"><div class="h5"><div class="gmail_quote">2012/3/20 Stefano Dal Pra <span dir="ltr"><<a href="mailto:s.dalpra@gmail.com" target="_blank">s.dalpra@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div>Non so se ho capito bene cosa ti serve, ma con questo:<div><br>keys = [<br>    ("LDAP server", "Agent"),<br>    ("-LDAP-server-", "_S-"),<br>    ("Pippo'", "'pluto"),<br>



</div>

    ("Pippo", None),<br>    ("Pippo", "")<br>]<br><br>T=[]<br>for a,b in keys:<br>    print q.curs.mogrify("select trim(%s|| coalesce( '_'||%s,'' ),'_');",(a,b))<br>





    q.curs.execute("select trim(%s|| coalesce( '_'||%s,'' ),'_');",(a,b))<br>    T.append(q.curs.fetchone()[0])<br><br>print '\n'.join(T)<br><br><br>Ottengo:<br>>>> T=[]<br>





>>> for a,b in keys:<br>...     print q.curs.mogrify("select trim(%s|| coalesce( '_'||%s,'' ),'_');",(a,b))<br>...     q.curs.execute("select trim(%s|| coalesce( '_'||%s,'' ),'_');",(a,b))<br>





...     T.append(q.curs.fetchone()[0])<br>... <br>select trim('LDAP server'|| coalesce( '_'||'Agent','' ),'_');<br>select trim('-LDAP-server-'|| coalesce( '_'||'_S-','' ),'_');<br>





select trim('Pippo'''|| coalesce( '_'||'''pluto','' ),'_');<br>select trim('Pippo'|| coalesce( '_'||NULL,'' ),'_');<br>select trim('Pippo'|| coalesce( '_'||'','' ),'_');<br>





>>> print '\n'.join(T)<br>LDAP server_Agent<br>-LDAP-server-__S-<br>Pippo'_'pluto<br>Pippo<br>Pippo<br><br>Ciao<br>Stefano</div></blockquote></div><br><div><br></div></div></div><div>Ciao Stefano,</div>

<div>

<br></div><div>cerco di essere più chiaro</div><div><br></div><div>SELECT NAME, AUTHOR FROM BOOK;</div><div><br></div><div>sono 2 campi della tabella book, ma non sono semplici campi sono la primary key composta della tabella book.</div>



<div><br></div><div>ora, in django non è possibile fare una cosa del genere a meno che di aggiungere una ulteriore colonna ID auto increment e fregarsene che la tabella è relazionata cosi.</div></blockquote><div><br>Ciao, causa "zeitnot" non riesco ad approfondire come meriterebbe. <br>

Ti segnalo pero' un modulo che avevo "tastato" tempo fa: <a href="https://storm.canonical.com/">https://storm.canonical.com/</a><br>dove puoi leggere:<br>[...]<br>Storm handles composed primary keys with ease (no need for surrogate keys).<br>

[...]<br><br>ed un'altra googlata che manda a: <a href="http://blogs.gnome.org/jamesh/2008/08/01/using-storm-with-django/">http://blogs.gnome.org/jamesh/2008/08/01/using-storm-with-django/</a><br>dove l'autore dice d'aver lavorato all'integrazione tra storm e django.<br>

<br>Aggiungo che (sempre per storm) avevo trovato un tool in grado di fare "l'operazione inversa": <br>da uno schema db gia' fatto realizzava in codice python tutta la parte ORM. <br><br>Forse con una rapida occhiata puoi valutare se valga la pena approfondire... Ciao<br>

Stefano<br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><br></div><div>Chiaramente se dovessi modellare tu il database la tabella chapters la metteresti con una ForeignKey verso la colonna ID della tabella book, ma... se il db è di una aplpicazione già fatta che non puoi toccare?</div>



<div><br></div><div>è qui che entra il progetto che stò scrivendo che ha lo scopo di dare la possibilità di usare chiavi composte usando i modelli django.</div><div><br></div><div>quindi di fatto la tabella chapter avrà 2 colonne book_author e boor_name che identificano la relazione book->chapters.</div>



<div><br></div><div><br></div><div>Ora, fino qui è facile, e anche gestire lato python la cosa è facile, il casino viene quando confrontiamo questa realtà con il concetto di relazioni generiche di django, dove una qualsiasi tabella, admin logs, tagging, messages, threads, possono essere legate a un QUALSIASI modello.</div>



<div><br></div><div>Quindi si usa una relazione datta fa ContentType e content_id. Dove il content_id è la chiave della tabella. </div><div><br></div><div>Nell'esempio book, name e author sono entrambe parti della chiave, quindi cosa ci sriviamo nella tabella che ha una rel generica? (ad esempio quella dei tags) </div>



<div><br></div><div>in prima battuta c'ho messo una concatenazione lato python delle chiavi univoche, e ho realizzato la librerie. Funziona in tutto e per tutto tranne in una funzionalità, ossia "dammi tutti i tags relazionati a questi oggetti", che avviene tramite una SELECT che mette in join la tabella book con la tabella tags.</div>



<div><br></div><div>Chiaramente visto che la chiave l'ho calcolata con python, non sono ingrado di fare una join e quindi prima mi devo prendere tutte le chiavi, poi devo produrre le concatenazioni e infine devo fare la queri con select in [pks]. COMPLETAMENTE NON PERFORMANTE</div>



<div><br></div><div>Quindi di fattos to cercando un modo di avere una funzione python che sia ingrado di fare la concatenazione e il contrario, ma che abbia una sua implementazione (almeno la concatenazione) lato DATABASE.</div>



<div><br></div><div>Cross database, quindi sia SQLITE, PGSQL, ORACLE, MYSQL (etc...)</div><div><br></div><div>Quindi la domanda riguarda la sintassi SQL non la sintassi python. </div><div>Comunque la soluzione che proponi purtroppo non è univoca, perche manca del quoting delle colonne altrimenti non potremmo distinguere</div>



<div><br></div><div>-LDAP-server-__S- </div><div>=> </div><div>( "-LDAP-server-", "", "_S-" )</div><div>( "-LDAP-server-", "", "", "S-" )</div><div>



( "-LDAP-server-", "_", "S-" )</div><div><br></div><div>per questo nella concatenazione c'è bisogno di fare il quoting con apice singolo delle colonne e anche l'escaping sempre dell'apice singolo.</div>



<div><br></div><div><span style="color:rgb(80,0,80);font-size:13px;font-family:arial,sans-serif">'</span><font style="font-size:13px;font-family:arial,sans-serif" color="#ff0000">-LDAP-server-</font><span style="color:rgb(80,0,80);font-size:13px;font-family:arial,sans-serif">'_'</span><font style="font-size:13px;font-family:arial,sans-serif" color="#ff0000">_S-</font><span style="color:rgb(80,0,80);font-size:13px;font-family:arial,sans-serif">'</span></div>



<div>da notare che qui i 2 underscore sono di facile comprensione, uno è unn separatore, l'altro è parte della contenuto, basta contare il numero di apici alla sua sinistra se è pari è un separatore.</div><div><br></div>



<div>ciao</div><span class="HOEnZb"><font color="#888888"><div>Simone</div>
</font></span><br>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
<br></blockquote></div><br>