Maybe something like 
this: 
http://clarkdave.net/2015/03/navigating-null-safety-with-json-and-postgresql/

Anthony

On Friday, June 1, 2018 at 8:44:21 AM UTC-4, mweissen wrote:
>
> Hi Anthony!
>
> Of course my exaple is very simplified and - sorry - I did not test it.
> Now I have found the solution
>
> I have written:
>
>     query1 = db.sendeprotokoll.typ=="UMF"
>     query1 &= *db*("extra->>'umfragetextid'='4'")
>     r1 = db(query1)._select("sendeprotokoll.typ", "sendeprotokoll.extra")
>
> But it should be:
>     
>     query2 = db.sendeprotokoll.typ=="UMF"
>     query2 &= "extra->>'umfragetextid'='4'"
>     r2 = db(query2)._select("sendeprotokoll.typ", "sendeprotokoll.extra")
>
>
> query1 : 
> <Query (("sendeprotokoll"."typ" = 'UMF') AND <Set 
> extra->>'umfragetextid'='4'>)>
> query2 : 
> <Query (("sendeprotokoll"."typ" = 'UMF') AND extra->>'umfragetextid'='4')>
> r1 : 
> SELECT "sendeprotokoll"."typ", "sendeprotokoll"."extra" FROM 
> "sendeprotokoll" WHERE ((("sendeprotokoll"."typ" = 'UMF') AND <Set 
> extra->>'umfragetextid'='4'>));
> r2 : 
> SELECT "sendeprotokoll"."typ", "sendeprotokoll"."extra" FROM 
> "sendeprotokoll" WHERE ((("sendeprotokoll"."typ" = 'UMF') AND 
> extra->>'umfragetextid'='4'));
>
> Ok, problem solved, thank you!
>
> -------------------------------------------------
>
> But there is another question. 
> I want to use the json-query alone:
>
> query3 = "extra->>'umfragetextid'='4'"
> r3 = db(query3)._select("sendeprotokoll.typ", "sendeprotokoll.extra")
>
> r3:         SELECT "sendeprotokoll"."typ", "sendeprotokoll"."extra" FROM 
> "sendeprotokoll" WHERE extra->>'umfragetextid'='4';
>
> Looks good?
>
> But with
> r3 = db(query3).select("sendeprotokoll.typ", "sendeprotokoll.extra")
> I get a new error message and it comes from  *dal/pydal/adapters/base.py* 
>
> Ticket ID
>
> 195.230.45.151.2018-06-01.14-28-47.268ac848-705b-4300-ae59-bdb12d065fa4
> <class 'psycopg2.DataError'> cannot extract element from a scalarVersion
> web2py™ Version 2.15.4-stable+timestamp.2017.09.02.04.02.22
> Python Python 2.7.12: /usr/local/bin/uwsgi (prefix: /usr/local)
>
> Function argument list
>
> (self=<pydal.adapters.postgres.PostgrePsyco object>, *args=('SELECT 
> "sendeprotokoll"."typ", "sendeprotokoll"....endeprotokoll" WHERE 
> extra->>\'umfragetextid\'=\'4\';',), **kwargs={})
> Code listing
>
> 407.
> 408.
> 409.
> 410.
> 411.
> 412.
>
> 413.
> 414.
> 415.
> 416.
>
>     def execute(self, *args, **kwargs):
>         command = self.filter_sql_command(args[0])
>         handlers = self._build_handlers_for_execution()
>         for handler in handlers:
>             handler.before_execute(command)
>         rv = self.cursor.execute(command, *args[1:], **kwargs)
>
>         for handler in handlers:
>             handler.after_execute(command)
>         return rv
>
> Variables
> rv undefined
> self <pydal.adapters.postgres.PostgrePsyco object>
> args ('SELECT "sendeprotokoll"."typ", "sendeprotokoll"....endeprotokoll" 
> WHERE extra->>\'umfragetextid\'=\'4\';',)
> self.cursor <cursor object at 0x7f25d425d050; closed: 0>
> command 'SELECT "sendeprotokoll"."typ", 
> "sendeprotokoll"....endeprotokoll" WHERE extra->>\'umfragetextid\'=\'4\';'
> self.cursor.execute <built-in method execute of psycopg2._psycopg.cursor 
> object>
> kwargs {}
>
> What is wrong?
>
>
>
>
>
> 2018-05-31 23:14 GMT+02:00 Anthony:
>
>> "<set..." is the string representation of a DAL Set object.
>>
>> Can you show your exact code? Here's what I get:
>>
>> >>> db('j->>"x" = 1')._select(db.j.id)
>> 'SELECT "j"."id" FROM "j" WHERE j->>"x" = 1;'
>>
>> Anthony
>>
>> On Thursday, May 31, 2018 at 5:01:08 PM UTC-4, mweissen wrote:
>>>
>>> Let's say I have a table like
>>> db.define_table("mytable", Field("j", "json"))
>>> with some data like db.mytable.insert(j={"x":1})
>>>
>>> Now I want to find all records with x==1.
>>> Of course
>>> db(db.mytable.j["x"]==1)
>>> does not work (but it would be fine).
>>>
>>> I have tried some queries like
>>> db.mytable.j.like("%1%")
>>> db('(j-->x)=1')
>>>
>>> but nothing did work. web2py creates always a sql-statement with
>>> .... WHERE <Set(j-->X)=1>...
>>>
>>> Postgresql does not understand <set - there is an error message
>>> syntax error at or near "<" Where does this "<set..>" come from?
>>> Any ideas?
>>>
>>> Regards, Martin
>>>
>>> -- 
>> Resources:
>> - http://web2py.com
>> - http://web2py.com/book (Documentation)
>> - http://github.com/web2py/web2py (Source code)
>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "web2py-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to web2py+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to