database - Web2py 数据库连接和数据库设计

标签 database join web2py

这可能是一个愚蠢的问题,我已经读过这个: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'))

我想要做的是确保 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/

相关文章:

python - 在 Linux 上启动新安装的 web2py 时出现异常

java - 为什么我们需要数据库驱动程序?

database - SPARQL - 每个 Actor 的奖项数量?

php - 使用单选按钮和连接表获取 MySQL 数据

MySQL 查询 - 连接问题

web2py - 如何将提示文本插入 auth.login 表单

php - PEAR DB_DataObject 正在实现什么设计模式?

php - mySQL 中两个表中的 SELECT 和 SELECT COUNT

MySQL : Select the rows having the max value for one field and keep correct values for joining tables

linux - 如何为多个应用程序部署 web2py 调度程序?