yeah, you need to quote them though!!! MSSQL for example doesn't allow to do select * from 123a but works if you select * from [123a] PS: fields with only integers in names are to be quoted as well (this happens to all dbs adhering to T-SQL standard)
"select 123 from mytable" returns a column without name with the integer value 123 repeated for all the lines contained into a table. On Friday, September 14, 2012 4:04:01 AM UTC+2, Massimo Di Pierro wrote: > > Please open a ticket about this. For now it should safe for you to change > the regex in the source. I assumed (incorrectly) that SQL did not allow > table/field names starting with a number. > > Massimo > > On Thursday, 13 September 2012 19:58:48 UTC-5, Adi wrote: >> >> for the convenience i pulled out both versions, and my suggested change: >> 1.99.7 cleanup: >> def cleanup(text): >> """ >> validates that the given text is clean: only contains [0-9a-zA-Z_] >> """ >> >> if re.compile('[^0-9a-zA-Z_]').findall(text): >> raise SyntaxError, \ >> 'only [0-9a-zA-Z_] allowed in table and field names, received >> %s' \ >> % text >> return text >> >> 2.08 cleanup: >> >> REGEX_ALPHANUMERIC = re.compile('^[a-zA-Z]\w*$') >> >> def cleanup(text): >> """ >> validates that the given text is clean: only contains [0-9a-zA-Z_] >> """ >> if not REGEX_ALPHANUMERIC.match(text): >> raise SyntaxError, 'invalid table or field name: %s' % text >> return text >> >> >> >>> REGEX_ALPHANUMERIC = re.compile('^[a-zA-Z]\w*$') >> >>> REGEX_ALPHANUMERIC.match('40') >> >>> print REGEX_ALPHANUMERIC.match('40') >> None >> >> i changed into this and all works good: >> >>> REGEX_ALPHANUMERIC = re.compile('^[0-9a-zA-Z]\w*$') >> >>> print REGEX_ALPHANUMERIC.match('40aaa_aa').span() >> (0, 8) >> >> >> >> On Thursday, September 13, 2012 8:28:43 PM UTC-4, Adi wrote: >>> >>> One of my fields is 40off_sh (legacy MySQL db), and all works fine in >>> 1.97. Seems like cleanup function in dal doesn't like the numeric part at >>> the beginning of field name, or I'm reading it wrong? I checked the table >>> and the field is in, so it's not missing. >>> >>> I can't change the field name, since it's used by other applications, so >>> not sure what would you recommend to do here? >>> >>> Thanks, >>> Adnan >>> >>> Traceback (most recent call last): >>> File "/opt/web-apps/web2py/gluon/restricted.py", line 209, in restricted >>> exec ccode in environment >>> File "/opt/web-apps/web2py/applications/thane_us/models/db_1_common.py", >>> line 182, in <module> >>> Field('40off_sh', 'boolean',), >>> File "/opt/web-apps/web2py/gluon/dal.py", line 8396, in __init__ >>> self.name = fieldname = cleanup(fieldname) >>> File "/opt/web-apps/web2py/gluon/dal.py", line 4769, in cleanup >>> raise SyntaxError, 'invalid table or field name: %s' % text >>> SyntaxError: invalid table or field name: 40off_sh >>> >>> >>> --