通过URL将表名传递给Flask中的SQLAlchemy查询
简而言之,我该怎么做
var="TableName"
models.var.query.all()
解释
我的目标是让用户可以改变一系列项目的顺序。
我设置了一个ajax调用,它会把一组ID发送到下面的API。
如果我把查询写死,也就是直接写死每个表的API视图,这样是可以工作的。
但我遇到的问题是,我想让“table”在这一行中自动填充
models.table.query.filter_by(id=item).first()
以完成查询。
这是API视图,但我遇到了一个错误:“没有属性'table'”
@app.route('/order/<table>')
def order(table):
# import pdb;pdb.set_trace()
sortedItems = request.args.listvalues()[0]
o=1
import pdb;pdb.set_trace()
for item in sortedItems:
grab = models.table.query.filter_by(id=item).first()
grab.order=o
o=o+1
db.session.commit()
return jsonify(result=sortedItems)
1 个回答
3
你可以使用 getattr()
这个函数:
>>> var = 'table_name'
>>> table = getattr(models, var)
>>> table.query.filter_by(id=item).first()
如果你试图获取的属性不存在,getattr()
会抛出一个 AttributeError
错误。
下面是你 order()
函数的一个例子:
@app.route('/order/<table>')
def order(table):
sortedItems = request.args.listvalues()[0]
o=1
table = getattr(models, table)
for item in sortedItems:
grab = table.query.filter_by(id=item).first()
grab.order=o
o=o+1
db.session.commit()
return jsonify(result=sortedItems)