我正在制作一个web2py应用程序,我在模型中定义了两个mysql表数据库文件:
db.define_table('table1',
Field('id','integer'),
Field('name','string'),
migrate=False)
db.define_table('table2',
Field('id','integer'),
Field('name','string'),
migrate=False)
我希望应用程序返回这些表的并集:
^{pr2}$在一个SQLFORM.grid但显然
form=SQLFORM.grid(data, create=False, deletable=False, editable=False, maxtextlength=100, paginate=10)
不是该走的路。在
有人能帮帮我吗?这一定很简单,但我很难找到解决办法。在
谢谢你
网格被设计为接受一个表或查询,因此不能传递
Rows
对象或任意SQL。最好的方法是在数据库中创建一个视图,并创建一个与该视图相关联的新的DAL模型定义(请确保设置migrate=False
,因为您不希望DAL试图用视图的名称创建一个表)。然后可以将视图模型传递到栅格:上面的工作原理是因为web2py将把数据库视图的模型视为任何其他数据库表,发出一个查询来选择它的所有记录。在这种情况下,不需要
executesql
,因为表的联合由视图在数据库中处理。在实际上,您可以将表定义简化为:
^{pr2}$当您将一个现有表传递给
.define_table()
时,您将得到一个具有与原始表相同字段定义的新表,这正是我们想要的。在如果为每个可能的联合创建单独的视图是不可行的,一种可能的替代方法是通过
executesql
检索数据,然后迭代记录,将每个记录插入内存中的SQLite数据库表中,然后将其传递给网格:设置
as_dict=True
会返回一个字典列表,这使得插入更容易,因为字典的键是插入所需的字段名。在注意,这个方法有点低效,所以您必须测试它,看看它在工作负载下的表现。在
相关问题 更多 >
编程相关推荐