Re: [Python] Help me with PG JSON e Django

2016-12-28 Per discussione Carlos Catucci
2016-12-27 22:56 GMT+01:00 Alessandro Dentella :
> Posso suggerirti di controllare:
>
> * cosa hai veramente nel db

 id | agency_code | search_offer | block_type | location |
customer_price | agency_price | details | active | deleted | agency_id
| rent_sale

  1 | A0001 | 1  | Appartamento | Pescara  | 10 | 8 |
[{"details": {"mp": "M", "mq": "80:", "qta": "2:"}, "attribute":
"camera da letto"}, {"details": {"mp": "M", "qta": "1:"}, "attribute":
"bagno"}, {"details": {"mp": "P", "yn": "Y:"}, "attribute": "posto
auto"}, {"details": {"mp": "M", "yn": "Y:"}, "attribute":
"ascensore"}, {"details": {"mp": "M", "yn": "Y:"}, "attribute":
"riscaldamento autonomo"}, {"details": {"mp": "P", "mq": ":", "yn":
"Y", "qta": "1:"}, "attribute": "terrazzo"}] | t | f | 1 | 1

In pratica una lista di dizionari ma per sicurezza ho rpvato acnhe a salvare

12 | C0001 | 2 | appartamento | pescara | 10 | 8 |
{"block_details": {"details": {"mp": "M", "mq": "80:", "qta": "2:"},
"attribute": "camera da letto"}} | t | t | 1 | 1

quindi con un dizionario di dizionari

mi veine da pensare che la prova che devo fare a questo punto e' di
provare la query postgres

> * se da prompt di pg tutto funziona (a me la parte saliente del WHERE
>  è:
>
>  WHERE "marketing_transmission"."substitution_data" @>
>  '{"display_name": "Salvatore Z..."}'
>
> Ricordo che all'inizio avevo problemi nell'inserimento e mi finivano
> dentro nel valore del campo delle graffe controbarrate. Era un
> problema di interfaccia (admin), non di ORM a memoria.

Io ho fatto le prove con ./manage.py shell, adesso vedo di farmi
stampare la query che genera

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Help me with PG JSON e Django

2016-12-27 Per discussione Raffaele Salmaso
On Tue, Dec 27, 2016 at 11:03 PM, Andrea D'Amore 
wrote:

> Non
> Blocks.objects.filter(details__block_details__2__attribute='bagno')
> ?
>
Anche, altro modo (senza usare __contains)

-- 
| Raffaele Salmaso
| https://salmaso.org
| https://bitbucket.org/rsalmaso
| https://github.com/rsalmaso
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Help me with PG JSON e Django

2016-12-27 Per discussione Andrea D'Amore
2016-12-27 22:59 GMT+01:00 Raffaele Salmaso :

> Hai provato con il path completo?
> Block.objects.filter(details__block_details__0__contains={'attribute':
> 'bagno'})
> ?

Non

Blocks.objects.filter(details__block_details__2__attribute='bagno')

?


-- 
Andrea
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Help me with PG JSON e Django

2016-12-27 Per discussione Raffaele Salmaso
2016-12-27 22:03 GMT+01:00 Carlos Catucci :

> Secondo il manuale di Django, versione 1.9,

Provato anche con la 1.10?
Versione di postgresql?
Versione di python?
Versione di psycopg2?

Questo un esempio di inserimento
>
> Blocks.objects.create(agency_id=1,agency_code='C0001',rent_
> sale='1',search_offer='2',block_type='appartamento',
> location='pescara',customer_price=10.0,agency_price=8.0,
> active='t',deleted='f',details= {'block_details': [{"details": {"mp":
> "M", "mq": "80:", "qta": "2:"}, "attribute": "camera da letto"},
> {"details": {"mp": "M", "mq": "80:", "qta": "2:"}, "attribute":
> "camera da letto"}, {"details": {"mp": "M", "qta": "1:"}, "attribute":
> "bagno"}, {"details": {"mp": "P", "yn": "Y:"}, "attribute": "posto
> auto"}, {"details": {"mp": "M", "yn": "Y:"}, "attribute":
> "ascensore"}]})
>
> Ma se eseguo una query tipo
>
> Blocks.objects.filter(details__contains={'attribute': 'bagno'})
>
Hai provato con il path completo?
Block.objects.filter(details__block_details__0__contains={'attribute':
'bagno'})
?


-- 
| Raffaele Salmaso
| https://salmaso.org
| https://bitbucket.org/rsalmaso
| https://github.com/rsalmaso
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Help me with PG JSON e Django

2016-12-27 Per discussione Alessandro Dentella
On Tue, Dec 27, 2016 at 10:03:59PM +0100, Carlos Catucci wrote:
> Secondo il manuale di Django, versione 1.9, si possono definire,
> previa importazione dellì'apposito contrib (from
> django.contrib.postgres.fields import JSONField) dei campi json in una
> tabella.
> Ed in effetti la creazione (Blocks.objects.create()) funziona benissimo.
> I dolori vengono al momento di recuperare di dati immagazzinati in
> questa struttura JSON.
> A sentire il manuale sarebeb tutto semplice e pulito
>
> Dog.objects.filter(data__breed='collie')
>
> oppure per casi complessi
>
> Dog.objects.filter(data__contains={'owner': 'Bob'})
>
> Peccato che pur provando e riprovando i dati non vengno recuperati mai.
>
> La struttura del model e' la seguente:
>
> class Blocks(models.Model):
> agency = models.ForeignKey("users.Agencies")
> agency_code = models.CharField(max_length=30)
> rent_sale = models.CharField(max_length=1,choices=RENT_SALE)
> search_offer = models.CharField(max_length=1,choices=SEARCH_OFFER)
> block_type = models.CharField(max_length=100)
> location = models.CharField(max_length=200)
> customer_price = models.FloatField(default=0.0)
> agency_price = models.FloatField(default=0.0)
> details = JSONField()
> active = models.BooleanField(default=True)
> deleted = models.BooleanField(default=False)
>
> Questo un esempio di inserimento
>
> Blocks.objects.create(agency_id=1,agency_code='C0001',rent_sale='1',search_offer='2',block_type='appartamento',location='pescara',customer_price=10.0,agency_price=8.0,
> active='t',deleted='f',details= {'block_details': [{"details": {"mp":
> "M", "mq": "80:", "qta": "2:"}, "attribute": "camera da letto"},
> {"details": {"mp": "M", "mq": "80:", "qta": "2:"}, "attribute":
> "camera da letto"}, {"details": {"mp": "M", "qta": "1:"}, "attribute":
> "bagno"}, {"details": {"mp": "P", "yn": "Y:"}, "attribute": "posto
> auto"}, {"details": {"mp": "M", "yn": "Y:"}, "attribute":
> "ascensore"}]})
>
> Ma se eseguo una query tipo
>
> Blocks.objects.filter(details__contains={'attribute': 'bagno'})
>
> ottengo indietro una lista vuota ( [] )

io confermo che questa sintassi per me funziona. Ho un caso analogo
dove i dati sono:

   {"display_name": "Salvatore Z...", "activate_url":
   "https://trepalchi.it/accounts/.../;,
   "current_site": "trepalchi.it",
   "subject": "Salvatore Z... conferma la tua email per entrare nel
   portale Trepalchi.it", }

In [1]: 
models.Transmission.objects.filter(substitution_data__contains={'display_name': 
'Salvatore Z...'})
Out[1]: ]>

Posso suggerirti di controllare:

* cosa hai veramente nel db
* se da prompt di pg tutto funziona (a me la parte saliente del WHERE
 è:

 WHERE "marketing_transmission"."substitution_data" @>
 '{"display_name": "Salvatore Z..."}'

Ricordo che all'inizio avevo problemi nell'inserimento e mi finivano
dentro nel valore del campo delle graffe controbarrate. Era un
problema di interfaccia (admin), non di ORM a memoria.


sandro
*:-)



--
Sandro Dentella  *:-)
http://trepalchi.itIl portale degli artisti
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python