Then use your string vars like this:  db[mytablename][myfield]

On Sunday, October 21, 2012 10:01:10 PM UTC+1, apinho wrote:
>
> That code doesn't work for me, I get  :<type 'exceptions.KeyError'> 
> 'mytablename'
>
> 'mytablename', 'myfield' are string vars. I don't really have a table 
> called 'mytablename'.
>
> On Sunday, October 21, 2012 7:39:50 PM UTC+1, Massimo Di Pierro wrote:
>>
>> You should not do this:
>>
>> orderby=mytablename+'.'+myfield+' '+myorder+','+mytablename+'.id'
>>
>> You should instead use one of the following
>>
>> orderby=db.mytablename.myfield|db.mytablename.id
>> orderby=~db.mytablename.myfield|db.mytablename.id
>> orderby=db[mytablename][myfield]|db[mytablename].id
>> orderby=~db[mytablename][myfield]|db[mytablename].id
>>
>> This may be vulnerable to SQL Injection
>>
>> orderby=mytablename+'.'+myfield+' '+myorder+','+mytablename+'.id'
>>
>>
>> On Sunday, 21 October 2012 12:52:38 UTC-5, apinho wrote:
>>>
>>> Ok,
>>>
>>> found the answer. By adding 'id' as an orderby field, the order of the 
>>> rows if never changed, even if the original orderby field is not unique :
>>>  
>>> rows = db().select(
>>>             mytable.ALL,
>>>             orderby=mytablename+'.'+myfield+' '+myorder+','+mytablename+
>>> '.id',
>>>             limitby=(page*ITEMSPERPAGE-ITEMSPERPAGE,page*ITEMSPERPAGE)
>>>             )
>>>
>>> On Sunday, October 21, 2012 6:19:16 PM UTC+1, apinho wrote:
>>>>
>>>> Hi, 
>>>>
>>>> I'm using this query :
>>>> rows = db().select(
>>>>             mytable.ALL,
>>>>             orderby=mytablename+'.'+myfield+' '+myorder,
>>>>             limitby=(page*ITEMSPERPAGE-ITEMSPERPAGE,page*ITEMSPERPAGE)
>>>>             )
>>>> 'myorder' is either 'asc' or 'desc. 'mytable', 'myorderby' and 
>>>> 'myorder' ar all string, that I get through request.vars...
>>>>
>>>> The DB is Postgresql.
>>>>
>>>> This works well when 'myfield' is unique within the DB. But when 
>>>> 'myfield' has repeated values, running this same query, with the same 
>>>> parameters doesn't always return the same set of rows.
>>>>
>>>> So the question is : When the orderby field is not enough to fully 
>>>> order tables, cause the field has repeated values, what order does Web2py 
>>>> apply ?
>>>> Or, maybe, it's Postgre related, and not web2py ?
>>>>
>>>> thx
>>>>
>>>>
>>>>
>>>>  
>>>>
>>>

-- 



Reply via email to