2016-02-23 3 views
1

Может кто-нибудь мне помочь? я новый программист, и для небольшого проекта мне нужно создать страницу профиля для каждого пользователя в базе данных в колбеЗапрос Mysql с переменной колбой

@app.route("/idpage/<int:page_id>", methods=['GET', 'POST']) 
def profilepage(page_id): 
    profile=engine.execute("SELECT username,password FROM tutorial WHERE id=" +page_id+ "").fetchall() 
    return render_template('viewprofile.html', profile=profile) 

ошибка дала мне это

TypeError: cannot concatenate 'str' and 'int' objects 

это мой второй «program» могу ли я найти документацию для использования sql?

+0

Поскольку вы только начинаете: отличный выбор на Flask, не так большой выбор в MySQL. Используйте Postgres. Это намного лучшая база данных, и она имеет менее странные gotchas. – ThiefMaster

ответ

3

Вы никогда не должны строить запросы, напрямую вставляя в них пользовательский ввод. Это откроет вас до SQL injectionattacks. Вместо этого вы должны использовать bind parameters.

engine.execute("SELECT username, password FROM tutorial WHERE id = ?", page_id) 

Примечание, символ привязки варьируется от драйвера к драйверу, но, как правило, одним из ? или %s.

+1

AFAIK это всегда '% s' или'% (name) s', и никогда '% d' (даже для чисел) – ThiefMaster

+1

Я использовал' s', но я не был уверен, что некоторые драйверы приняли другие. Я обновил ответ. Благодарю. – dirn

+0

Я считаю, что вы правы на '% s', который меня бросил, когда я начинал с SQLAlchemy. Однако подход является правильным. +1 – kungphu

Смежные вопросы