Мне нужно создать форму поиска на основе ввода формы запроса с использованием фляжной рамки. Запрос должен быть динамически построен на основе различных входных значений параметров, используя sqlalchemy CORE ONLY. Некоторые из значений могут быть пустыми. Также нужна команда curl для того же самого. Я столкнулся с методом sqlalchemy orm, использующим фильтр. Как именно я должен подойти? Я попробовал следующее: стол:sqlalchemy core построить динамический запрос
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 -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
Я удалил некоторые из атрибутов, как я просто попробовать. Пожалуйста, верните, как можно сгенерировать запрос. У меня есть много значений атрибутов, которые нужно учитывать в запросе. Использование колбы 0.10, ядро sqlalchemy, python 2.7
При выполнении вышеуказанных данных данные не сохраняются последовательно в таблице. Иногда он сохраняет запись, но во много раз он подбрасывает код статуса http 400. Как сравнить sub_category_id с Null значением, которое является необязательным?
Можете ли вы рассказать о том, что вы подразумеваете под «тем, как запрос может быть сгенерирован», из вашего примера вы уже создаете запрос SELECT и выполняете его. Вы имеете в виду просмотр исходного SQL? –
@WarrenSpencer Я отредактировал комментарии к вышеуказанному запросу. Я просто хочу, чтобы sql выполнялся каждый раз без кода http-статуса 400 – user956424
@WarrenSpencer, выпрямленный статус 400, добавив точно такое же количество параметров в команду curl, что и в передаваемом dict. – user956424