【问题标题】:Web2py Database Joins and Database DesignWeb2py 数据库连接和数据库设计
【发布时间】:2013-01-15 05:09:43
【问题描述】:

这可能是一个愚蠢的问题,我读过这个:http://web2py.com/books/default/chapter/29/06#One-to-many-relation

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

这是我希望我的表格的布局,包括参考资料和所有内容:

http://imgur.com/fpaDb

这是我在 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 来引用课程表。

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

【问题讨论】:

    标签: database join web2py


    【解决方案1】:

    引用字段存储被引用表的主键,即id 字段。如果想要引用记录的 CallNumber 值,可以在 join 时轻松获取:

    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
    

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

    【讨论】:

    • 这是完美的。它帮助我了解连接的工作方式与我最初想象的不同。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2011-09-30
    • 2010-10-01
    相关资源
    最近更新 更多