Brilliant - thank you very much for the thoughtful reply. 

I actually set it as a session var bc there are several tables with a 
decimal field that I want to be consistent with each other, BUT I really 
appreciate your point about accidentally triggering db migrations. I hadn't 
considered that.

-jl


On Thursday, December 28, 2017 at 3:18:41 PM UTC-7, Anthony wrote:
>
> On Thursday, December 28, 2017 at 11:22:25 AM UTC-5, Jordan Ladora wrote:
>>
>> Hi,
>>
>> I'm using postgres and have a table-
>>
>> db.define_table('volumes',
>>     Field('vol', 'decimal(100, session.decplaces)', default=0, 
>> readable=False, writable=False),
>>     auth.signature, migrate=True,
>>     )
>>
>
> Notice that 'decimal(100, session.decplaces)' is a string literal, not 
> Python code calling a decimal() function. The string literal is parsed by 
> the DAL, extracting the strings "100" and "session.decplaces", expecting 
> each to be interpretable as an integer. Of course, the string 
> "session.decplaces" is not an integer, so you get an error. Instead, you 
> have to create a string that includes the relevant integer value:
>
> 'decimal(100, %s)' % session.decplaces
>
> which will ultimately generate the string:
>
> 'decimal(100, 7)'
>
> Generally, though, storing the number of decimal places in a session 
> variable is probably not a good idea. Presumably you are using the session 
> because you want to allow different user sessions to have different numbers 
> of decimal places. But that doesn't work because the decimal places can 
> affect the database schema (depending on the database) -- so every time a 
> different user makes a request, you'll end up running a database migration 
> if migrations are turned on, or otherwise there will be no point to 
> specifying the different decimal places if migrations are turned off. In 
> any case, you will not end up with custom decimal places for each user, as 
> the decimal places are defined for an entire column, not per row. Pick one 
> decimal place and use it for all users (which means there is no reason to 
> store it in the session).
>
> Anthony
>

-- 
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