web2py的DAL无法识别旧版DB上的CamelCased列名

时间:2013-01-04 14:13:47

标签: python data-access-layer web2py

我目前正在使用web2py 2.2.1的项目,我们有一个我们需要连接的遗留数据库。问题是为这个数据库做了DDL的人,用CamelCase命名所有列(我知道标准是snake_case)。

因此,我使用Mariano Reingart制作的extract_pgsql_models.py提取了所有模型而没有任何问题。这是一个例子(当我意识到这个问题时我正在使用的实际模型):

migrate = False
db.define_table('tracks',
        Field('id', type='id'),
        Field('hash', type='string', length=40, unique=True),
        Field('size', type='integer', unique=True),
        Field('duration', type='integer'),
        Field('quality', type='double'),
        Field('creationDate', type='datetime'), # CamelCase Here
        Field('expirationDate', type='datetime'), # and here
        Field('scheduledDate', type='datetime'), # and here too
        Field('dailyRepetitions', type='integer'), #another one here
        Field('tags', type='text'),
        Field('active', type='boolean', default=True),
        Field('trackType', type='reference track_types', ondelete='RESTRICT'), # here
        Field('clientType', type='reference client_types', ondelete='RESTRICT'), # here
        Field('relatedClient', type='reference clients', ondelete='CASCADE'), #here
        Field('advertiser', type='reference advertisers', ondelete='CASCADE'),
        migrate=migrate)

然后,我在我的控制器中执行了以下操作:

...
rows = db(db.tracks.id > 0).select()
...

并收到以下错误:

('ERROR', '42703', 'column tracks.creationdate does not exist')

因此,web2py也会降低我的列名称。

我在postgres中选择了一个选项,通常情况下它不起作用

SELECT creationDate FROM tracks;

但是通过以下安排它确实:

SELECT "creationDate" FROM tracks;

我想知道是否有任何解决方法。

非常感谢。

0 个答案:

没有答案