2017-04-12 98 views
0

我正在使用web2py与MySQL数据库。在我db.py文件数据库计划如下所示:Web2py MySQL数据库引用错误

db.define_table('app', 
       Field('name'), 
       Field('appdomain') 
       ) 

db.define_table('role_group', 
       Field('appid', db.app), 
       Field('name') 
       ) 

db.define_table('user', 
       Field('userid', required=True), 
       Field('name', required=True), 
       primarykey=['userid']) 

db.define_table('role', 
       Field('appid', db.app), 
       Field('role_group', db.role_group), 
       Field('name') 
       ) 

db.define_table('role_authorization', 
       Field('userid', db.user, required=True), 
       Field('roleid', db.role, required=True), 
       primarykey=['userid', 'roleid'] 
       ) 

db.define_table('group_authorization', 
       Field('userid', db.user), 
       Field('groupid', db.role_group), 
       primarykey=['userid', 'groupid'] 
       ) 

当我运行以下查询:含底座无效字面长():

userid = "fb|1234" 
userAuthorizations = db((db.user.userid == userid) 
           & (db.tetra_user.userid == db.role_authorization.userid) 
           & (db.role_authorization.roleid == db.role.id) 
           & (db.role.appid == db.app.id) 
          ).select() 

它返回此错误:ValueError异常10:'fb | 1234'。 我希望有人知道是什么原因导致这个错误,并可以帮助我解决它。

亲切的问候, 西蒙

+0

为什么你使用'primarkey'?这很少需要,只用于支持遗留数据库。 – cdonts

回答

0

首先,你需要设置迁移到假的遗留表。所以web2py不会改变它们。

其次,尽量指定字段userid的类型,因为当您尝试投“FB | 1234”的这种错误发生在整数:

>>> int("fb|1234") 
ValueError: invalid literal for int() with base 10: 'fb|1234'