我如何 "link" 一个 web2py 数据库?
How do I "link" a web2py database?
我正在尝试为 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')
问题是我可以用不同的值多次为一家公司重复同一年。
我怎样才能"link"一年到一家公司,那一年的股权价值。
假设您希望 company_id
和 years_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
匹配的记录集中是唯一的(这保证company_id
/years_id
对是唯一的,同时允许单独在任一字段上使用 non-unique 值)。然后,此 IS_NOT_IN_DB
验证器作为 _and
参数传递给该字段的标准 IS_IN_DB
验证器。
我正在尝试为 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')
问题是我可以用不同的值多次为一家公司重复同一年。 我怎样才能"link"一年到一家公司,那一年的股权价值。
假设您希望 company_id
和 years_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
匹配的记录集中是唯一的(这保证company_id
/years_id
对是唯一的,同时允许单独在任一字段上使用 non-unique 值)。然后,此 IS_NOT_IN_DB
验证器作为 _and
参数传递给该字段的标准 IS_IN_DB
验证器。