在web2py中,我可以指定一个现有的命名字段作为遗留数据库的自动编号ID吗?
我在一个已有的MSSQL数据库里有很多表格,每个表都有自动编号的主键,但这些主键的名字都不是'ID',而是像PropertyID、ClientID这样的名字。官方文档似乎建议把这些字段都改成'id':
遗留数据库
web2py可以在某些条件下连接到遗留数据库:
- 每个表必须有一个唯一的自动递增整数字段,叫做"id"
- 记录必须只能通过"id"字段来引用。
如果不满足这些条件,就需要手动修改表格,使其符合这些要求,否则web2py就无法访问它们。
这并不是说这是个限制,而是web2py鼓励你遵循良好实践的众多方式之一。
不过,这样做会导致其他使用这个数据库的应用程序里的数百个查询都要被破坏。肯定有办法指定一个已有的自动编号字段,来代替'id'使用。
这看起来是一个地方,Django做得对,而web2py做得很糟糕。还是我只是忽略了什么? 似乎我只是忽略了什么...
2 个回答
1
显然,这个内容没有被写进现在的web2py书里,但看起来实际上已经实现了。从web2py的谷歌小组里可以找到相关信息:web2py和键控表。
注意:我是在浏览PDF书中未记录的新功能(第二版)时发现这个的。
4
这个说法已经过时了。web2py支持三种情况:
- 一个表有一个叫做'id'的自动增长字段(这是默认情况)
一个表有一个不是叫'id'的自动增长字段,可以用下面的方式定义这个表:
db.define_table('name',Field('id_name','id'),...其他字段...)
一个表有一个不同的主键
db.define_table('name',...字段..., primarykey=[....])
主键是一个字段名称的列表。
选项3并不是所有支持的数据库都能用,但可以很容易地扩展。我们只是没有收到太多的请求,所以没有足够的测试人员来测试所有可能的选项。请把这个讨论转到web2py的邮件列表上,我们很乐意进一步帮助你。