python 数据库 table 链接
python database table linking
我是 Python 的新手,我正在尝试使用 web2py 制作一个简单的公告板系统应用程序。我正在尝试将 post 添加到某个板中,并通过在我的 post table 中包含以下字段来链接 post 和板: Field('board_id', db.board).当我尝试在特定板内创建 post 时,出现错误:"OperationalError: no such column: board.id"。我的 create_posts 代码:
def add_post():
board = db.board(request.args(0))
form = SQLFORM(db.post)
db.pst.board_id.default = db.board.id
if form.process().accepted:
session.flash = T('The data was inserted')
redirect(URL('default', 'index'))
return dict(form=form, board=board)
当我尝试在显示某个板中 post 的页面上执行 {{=board}} 时,我得到行 {'name': 'hi', 'id': 1L, 'pst': Set (pst.board_id = 1), 'description': 'hi'} 所以我知道它在数据库中。但是当我对 "add post" 表单页面做同样的事情时,它显示 "board: None"。很迷茫,请指点一下!
您的功能似乎有几个问题。首先,您将 board_id
字段的默认值指定为 Field
对象(即 db.board.id
),而不是实际的 id 值(例如,board.id
)。其次,在创建 SQLFORM
.
之前 应分配任何默认值
最后,您将 db.post
传递给 SQLFORM
,但在下一行中,post table 似乎被称为 db.pst
-- 大概这些不是两个独立的 table,一个只是打字错误。
关于 {{=board}}
显示 None
的问题,这表明 board = db.board(request.args(0))
没有检索记录,这是由于 request.args(0)
本身是 [=21] =] 或与 db.board
中的任何记录 ID 都不匹配的值。您应该检查如何生成通向 add_post
的链接,并确认第一个 URL arg 中有一个有效的 db.board
id。无论如何,检测何时没有有效的板记录并重定向或显示错误消息可能是个好主意。
因此,您的函数应如下所示:
def add_post():
board = db.board(request.args(0)) or redirect(URL('default', 'index'))
db.pst.board_id.default = board.id
form = SQLFORM(db.pst)
if form.process(next=URL('default', 'index'),
message_onsuccess=T('The data was inserted'))
return dict(form=form, board=board)
请注意,如果您确信指向 add_post
的链接将包含有效的版块 ID,那么您可以完全删除第一行,因为没有理由根据其 ID 检索记录,如果唯一您需要的字段是 ID(您已经拥有)。相反,第二行可以是:
db.pst.board_id.default = request.args(0) or redirect(URL('default', 'index'))
我是 Python 的新手,我正在尝试使用 web2py 制作一个简单的公告板系统应用程序。我正在尝试将 post 添加到某个板中,并通过在我的 post table 中包含以下字段来链接 post 和板: Field('board_id', db.board).当我尝试在特定板内创建 post 时,出现错误:"OperationalError: no such column: board.id"。我的 create_posts 代码:
def add_post():
board = db.board(request.args(0))
form = SQLFORM(db.post)
db.pst.board_id.default = db.board.id
if form.process().accepted:
session.flash = T('The data was inserted')
redirect(URL('default', 'index'))
return dict(form=form, board=board)
当我尝试在显示某个板中 post 的页面上执行 {{=board}} 时,我得到行 {'name': 'hi', 'id': 1L, 'pst': Set (pst.board_id = 1), 'description': 'hi'} 所以我知道它在数据库中。但是当我对 "add post" 表单页面做同样的事情时,它显示 "board: None"。很迷茫,请指点一下!
您的功能似乎有几个问题。首先,您将 board_id
字段的默认值指定为 Field
对象(即 db.board.id
),而不是实际的 id 值(例如,board.id
)。其次,在创建 SQLFORM
.
最后,您将 db.post
传递给 SQLFORM
,但在下一行中,post table 似乎被称为 db.pst
-- 大概这些不是两个独立的 table,一个只是打字错误。
关于 {{=board}}
显示 None
的问题,这表明 board = db.board(request.args(0))
没有检索记录,这是由于 request.args(0)
本身是 [=21] =] 或与 db.board
中的任何记录 ID 都不匹配的值。您应该检查如何生成通向 add_post
的链接,并确认第一个 URL arg 中有一个有效的 db.board
id。无论如何,检测何时没有有效的板记录并重定向或显示错误消息可能是个好主意。
因此,您的函数应如下所示:
def add_post():
board = db.board(request.args(0)) or redirect(URL('default', 'index'))
db.pst.board_id.default = board.id
form = SQLFORM(db.pst)
if form.process(next=URL('default', 'index'),
message_onsuccess=T('The data was inserted'))
return dict(form=form, board=board)
请注意,如果您确信指向 add_post
的链接将包含有效的版块 ID,那么您可以完全删除第一行,因为没有理由根据其 ID 检索记录,如果唯一您需要的字段是 ID(您已经拥有)。相反,第二行可以是:
db.pst.board_id.default = request.args(0) or redirect(URL('default', 'index'))