我如何"链接"一个web2py数据库?

时间:2015-12-31 16:31:34

标签: python database web2py

我正在尝试为web2py建立股票数据数据库,例如,公司A持有2010年,2011年,2012年的股权数据......公司B持有2010年,2011年,2012年的股权数据...... 这就是我想出来的。

db.define_table(
    'company',
    Field('name'),
    format = '%(name)s')

db.define_table(
    'years',
    Field('fiscal_year'),
    format = '%(fiscal_year)s')

db.define_table(
    'stock_data',
    Field('company_id', db.company),
    Field('years_id', db.years),
    Field('equity', 'integer'),
    format = '%(equity)s %(years_id)s -> %(company_id)s')

db.company.name.requires = IS_NOT_IN_DB(db, 'company.name')
db.years.fiscal_year.requires = IS_NOT_IN_DB(db, 'years.fiscal_year') 

问题在于,我可以在同一年为一家公司重复多次不同的价值观。 我怎样才能"链接"一年到公司和那一年的股权价值。

1 个答案:

答案 0 :(得分:1)

假设您希望company_idyears_id组合是唯一的,您可以执行以下操作:

db.define_table(
    'stock_data',
    Field('company_id', db.company),
    Field('years_id', db.years),
    Field('equity', 'integer'),
    format = '%(equity)s %(years_id)s -> %(company_id)s')

matching_company_id = db.stock_data.company_id == request.vars.company_id
unique_company_year = IS_NOT_IN_DB(db(matching_company_id), 'stock_data.years_id')
db.stock_data.years_id.requires = IS_IN_DB(db, 'years.id', db.years._format,
                                           _and=unique_company_year)

在上文中,unique_company_year确保提交的years_id值在company_id与提交的company_id匹配的记录集中是唯一的(这可以保证{ {1}} / company_id对是唯一的,同时仅在任一字段上允许非唯一值)。然后将此years_id验证程序作为IS_NOT_IN_DB参数传递给该字段的标准_and验证程序。