Database Web2py数据库连接与数据库设计

Database Web2py数据库连接与数据库设计,database,join,web2py,Database,Join,Web2py,这可能是个愚蠢的问题,我已经读过了: 但我仍然无法理解我的数据库声明哪里出了问题 以下是我希望我的表的布局,包括引用和所有内容: 下面是我在db.py中使用的web2py代码 db.define_table('Course',Field('CallNumber','integer'),Field('Section','string',),Field('Title','string'),Field('MinCredit','integer'),Field('MaxCredit','integer

这可能是个愚蠢的问题,我已经读过了:

但我仍然无法理解我的数据库声明哪里出了问题

以下是我希望我的表的布局,包括引用和所有内容:

下面是我在db.py中使用的web2py代码

db.define_table('Course',Field('CallNumber','integer'),Field('Section','string',),Field('Title','string'),Field('MinCredit','integer'),Field('MaxCredit','integer'),Field('MaxEnrollment','integer'),Field('CurrentEnrollment','integer'),Field('Status','string'),Field('Instructor1','string'),Field('Term','string'))
db.define_table('Meeting',Field('CallNumber',db.Course),Field('Day','string'),Field('StartTime','string'),Field('EndTime','string'),Field('Site','string'),Field('Building','string'),Field('Room','string'),Field('Activity','string'))
db.define_table('Requirement',Field('CallNumber',db.Course),Field('Control','string'),Field('Argument','string'),Field('Value1','string'),Field('Operator','string'),Field('Value2','string'))
我试图做的是确保会议表和需求表引用课程表,而不是通过web2py为课程表中的条目分配的任意id,而是通过CallNumber


任何帮助都将不胜感激。谢谢。

引用字段存储引用表的主键,即
id
字段。如果需要引用记录的CallNumber值,可以在执行连接时轻松获取该值:

db.define_table('Course', Field('CallNumber', 'integer'), ...)
db.define_table('Meeting', Field('Course', db.Course), ...)

row = db(db.Course.id == db.Meeting.Course).select().first()
print row.Course.CallNumber
您还可以执行以下操作:


注意,递归选择在多个记录上循环时效率较低,因为它对每个记录执行单独的数据库查询。在这种情况下,上面的内部连接方法更有效,因为它只涉及一个查询来检索整个连接记录集。

这非常完美。它帮助我理解了Join的工作方式与我最初认为的不同。非常感谢。
row = db(db.Meeting).select().first()
print row.Course.CallNumber