【问题标题】:How to create SQL Query using Session Variable? [duplicate]如何使用会话变量创建 SQL 查询? [复制]
【发布时间】:2018-06-29 20:25:47
【问题描述】:

我正在尝试在 python 程序中创建一个 SQL 查询,并且我想传入我的会话变量。 session 变量包含程序的登录用户。我有一些语法问题。

query = "SELECT * FROM following WHERE following.username == 'flask.session['user']' "

这是我的错误:

sqlite3.OperationalError: near "user": syntax error

我不确定如何解决这个问题。非常感谢您的帮助。

【问题讨论】:

  • 我不使用 Flask 所以根据常见错误猜测:cursor.execute("SELECT * FROM following WHERE username = ?", (flask.session['user'],))

标签: python sql database sqlite flask


【解决方案1】:

roganjosh 解决了这个问题。

用途:

cursor.execute("SELECT * FROM following WHERE username = ?", (flask.session['user'],))

【讨论】:

  • 在高层次上(即不太具体),你知道我在那里做了什么吗?拥有可以工作的代码是一回事,理解它为什么工作是另一回事,所以我想确保您理解我所做的更改。
  • 这是参数替换,对吧?
  • 这是一个参数化查询,有助于防止 SQL 注入。由于您只绑定单个变量(可能是字符串),因此您应该始终将值作为元组提供(因此 (flask.session['user'],)),否则它将尝试逐个字符地解压您的值。
【解决方案2】:

如果你知道 session['user'] 是一个字符串,那么试试这个:

query = "SELECT * FROM following WHERE following.username == '%s' " %(session['user'])

你可以使用,%s 代表字符串,%i 代表整数...

【讨论】:

  • 这是一个非常糟糕的建议;它使用字符串格式,让用户更容易受到 SQL 注入的影响。完全没有理由不为此使用参数化查询。
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多