我需要使用flask框架基于请求表单输入构建一个搜索表单。查询应该是根据参数的各种输入值动态构建的,只使用sqlalchemy CORE。有些值可以为空。同时还需要curl命令。我了解到可以使用基于过滤器的sqlalchemy orm方法。我应该如何处理?我尝试了以下内容: 表格:
docs = Table("docs", metadata,
Column("id", Integer, primary_key=True),
Column("file_name", String),
Column("custom_tag", String, nullable=True),
Column("description", String, nullable=True),
Column("up_date", DateTime(timezone=True),
default=datetime.datetime.utcnow),
Column("category_id", Integer,
ForeignKey("categories.id"), nullable=True),
Column("sub_category_id", Integer,
ForeignKey("sub_categories.id"), nullable=True),
Column("alert_date", DateTime(timezone=True)))
curl:
curl -b cookies.txt -X POST http://localhost:5000/api/v1.0/docs -d "category_id=1&sub_category_id=None&alert_date=None"
这里的任何参数值都是可选的。
视图:
@app.route('/api/v1.0/docs', methods=['POST'])
def search_docs():
if request.method == 'POST':
doc_list = []
category_id = request.form['category_id']
sub_category_id = request.form['sub_category_id']
custom_tag = request.form['custom_tag']
alert_date = request.form['alert_date']
f_dict = {
'category_id': category_id,
'sub_category_id': sub_category_id,
'alert_date': alert_date
}
for f in f_dict:
if f_dict[f] == "None":
f_dict[f] = None
s = select([docs]).\
where(
and_(
docs.c.category_id == category_id,
docs.c.sub_category_id == sub_category_id,
docs.c.alert_date == alert_date
)
)
print str(s)
rs = conn.execute(s)
for r in rs:
doc_list.append(dict(r))
return jsonify({'doc_list': doc_list}), 200
我删除了一些属性,因为我只是在尝试。请告诉我如何生成查询。我有许多属性值要考虑。使用flask 0.10、sqlalchemy core和python 2.7。
执行上述操作后,数据没有始终存储在表中。有时它会存储记录,但很多时候会抛出http 400状态码。如何将sub_category_id与可选的Null值进行比较?