Pyhton SQLite запрос на основе зарегистрированного имени пользователя - PullRequest
0 голосов
/ 19 апреля 2020

Мне трудно понять, почему я не могу получить ожидаемый результат от моего запроса. Я использую flask с SQLite и могу легко вернуть имя пользователя на веб-страницу с помощью "userlogin = session ['username']" Что я пытаюсь получить, это запрос база данных на основе имени пользователя вошедшего в систему пользователя, чтобы отображать только информацию, относящуюся к этому указанному c пользователю. mytable , настроена с использованием столбца имени пользователя, используемого для фильтра.

@app.route('/dashboard') 
@is_logged_in
def dashboard():
    from functions.sqlquery import sql_query
    userlogin = session['username']
    results = sql_query('''SELECT * FROM mytable WHERE username IS "userlogin"''')
    return render_template('dashboard.html', results=results)

sql_query.py

def sql_query(query):
   cur = conn.cursor()
   cur.execute(query)
   rows = cur.fetchall()
   return rows

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Запрос sql неверен. Вы должны использовать = вместо IS.

Я бы порекомендовал внести следующие изменения:

1) использовать параметризованный запрос, чтобы избежать атак sql инъекций. Поэтому передайте параметры в sql_query() как кортеж:

def sql_query(query, params):
   cur = conn.cursor()
   cur.execute(query, params)
   rows = cur.fetchall()
   return rows

2) измените вызов на sql_query

results = sql_query("SELECT * FROM mytable WHERE username = ?", (userlogin,))
0 голосов
/ 19 апреля 2020

попробуйте использовать:

results = sql_query("SELECT * FROM mytable WHERE username IS "+userlogin)

Хотя приведенный выше код также является плохой практикой с точки зрения безопасности

Я думаю, что вы ожидаете от своей очереди:

'' 'SELECT * FROM mytable WHERE Имя пользователя (независимо от того, какой сеанс [' username '] возвращает)' ''

, но на самом деле ваш код переводит:

'' 'SELECT * FROM mytable WHERE Имя пользователя "userlogin"' ''

(все, что вы написали как есть)

если я не ошибаюсь, в php вы можете избежать использования $ variableName даже внутри строки, но в python это не работает так

ИЛИ Я ПОЧЕМУ ЧТО-ТО ЧТО-ТО, ПОТОМУ ЧТО Я НЕ ЗНАЮ FLASK И SQLITE ЭТО МНОГО И я обычно использую PYTHON2 .7

...