【问题标题】:Python sqlite query based on logged username [closed]基于记录的用户名的Python sqlite查询[关闭]
【发布时间】:2020-08-02 04:04:02
【问题描述】:

我很难理解为什么我无法从我的查询中得到预期的结果。 我正在使用带有 SQLite 的烧瓶,并且可以通过 "userlogin = session['username']"轻松地将用户名返回到网页 我想要得到的是根据登录用户的用户名查询数据库,以便只显示与该特定用户相关的信息。 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

【问题讨论】:

  • 您没有将用户名变量正确地传递到您的语句中。
  • 我应该纠正什么才能正确传递它?
  • results = sql_query(f"SELECT * FROM mytable WHERE username = {userlogin}")
  • 仍然出现错误,但我刚刚从 jignatius 那里得到了一个可行的建议,非常感谢您的帮助

标签: python sqlite flask


【解决方案1】:

尝试使用:

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

虽然从安全的角度来看,上面的代码也是一种不好的做法

我猜你对查询的期望是:

SELECT * 
FROM mytable 
WHERE username IS (whatever session['username'] returns)

但你的代码真正翻译成的是:

SELECT * 
FROM mytable 
WHERE username IS "userlogin"

(无论你写的是什么)

如果我没记错的话,在 php 中你甚至可以在字符串中使用 $variableName,但在 python 中它不会那样工作

或者我完全错过了一些东西,因为我不太了解 Flask 和 SQLITE,而且我通常使用 PYTHON2.7

【讨论】:

  • 谢谢,我试过了,但有一些错误,使用两种方法,sqlite3.OperationalError: near "session": syntax error
【解决方案2】:

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,))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多