这可能是一个愚蠢的问题,我已经读过这个:http://web2py.com/books/default/chapter/29/06#One-to-many-relation
但是我仍然无法理解我的数据库声明哪里出了问题。
这是我希望表格的布局,包含引用资料和所有内容:
这是我在 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'))
我想要做的是确保 session 和要求表引用回类(class)表,而不是通过 web2py 在类(class)表中分配条目的任意 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
您还可以执行 recursive select :
row = db(db.Meeting).select().first()
print row.Course.CallNumber
请注意,循环选择多个记录时效率较低,因为它对每个记录执行单独的数据库查询。在这种情况下,上面的内部联接方法更有效,因为它只涉及单个查询来检索整个联接记录集。
关于database - Web2py 数据库连接和数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14331517/