【发布时间】:2015-04-07 09:24:55
【问题描述】:
我有 web2py 应用程序,我必须为其编写 SQL 查询。有一个名为 homework 的表,其中我感兴趣的列是 receiver。此列包含已收到作业的学生列表。 本栏目由
创建db.define_table('homework',
Field('title'),
Field('description'),
Field('sender', db.auth_user),
Field('campus_class', db.campus_class),
Field('send_time', type='datetime'),
Field('completion_time_hw', type='integer'),
Field('attached_files', type='list:string'),
Field('created', type='datetime', default=request.now, writable=False, readable=False),
Field('modified', type='datetime', default=request.now, writable=False, readable=False),
Field('send_notification_on', type='datetime', writable=False, readable=False),
Field('send_status', type='boolean', default=False),
Field('receiver', type='list:reference auth_user'),
)
我需要将这些列表值与另一个名为 student_guardian_relation 的表中的列 student 进行比较。
db.define_table('student_guardian_relation',
Field('student',db.auth_user, requires=IS_NULL_OR(IS_IN_DB(db(db.auth_user.user_role == UserRoles.Student),db.auth_user.id,'%(first_name)s %(last_name)s'))),
Field('guardian',db.auth_user, requires=IS_NULL_OR(IS_IN_DB(db(db.auth_user.user_role == UserRoles.Guardian),db.auth_user.id,'%(first_name)s %(last_name)s')))
)
但是当我尝试比较这两个值时,我得到一个错误,内容如下:
运算符不存在:text = integer LINE 1: ...rdian_relation, homework WHERE (homework.receiver = student_... ^ HINT: 没有运算符匹配给定的名称和参数类型(s)。您可能需要添加显式类型转换。
这就是我的代码的作用:
print db(db.homework.receiver == db.student_guardian_relation.student).select(db.homework.receiver)
附加信息:
当我写的时候:
print db().select(db.homework.receiver)
我得到了一个接收者列表,如图所示。 任何帮助将不胜感激。 谢谢!
【问题讨论】:
-
DB 中的某物是一个 int,而某物是一个字符串,而 postgres 告诉您它无法比较这两者……如果看不到一点,很难分辨哪个是哪个更多代码——你能发布实际的模型类吗?
-
接收者是一个列表,我想将它与 int 中的学生 ID 进行比较。