Python 将变量放入 sql FROM 语句中

标签 python sql

您好,我正在尝试制作一条 sql 语句,我可以在 python 中给出该表和一个位置

SQL = "SELECT * FROM (%s) WHERE team_number=(%s) AND match_number=(%s);"
DATA = ('data', 2, 3)
cur.execute(SQL, DATA)
query = cur.fetchall()

我得到的错误是 psycopg2.ProgrammingError: syntax error at or near "'data'"

SELECT * FROM ('data') WHERE team_number=(2) and match_number=(3)

注意:我正在使用(%s)来停止sql注入(inject)

最佳答案

大多数准备好的语句 API(包括 Python 的 API)不允许将表名或列名作为参数。相反,您必须对表名进行硬编码:

SQL = "SELECT * FROM data WHERE team_number=(%s) AND match_number=(%s);"
DATA = (2, 3)
cur.execute(SQL, DATA)
query = cur.fetchall()

原因是允许表名作为参数可能会使您面临安全风险。想象一下,如果有人破解了您的 UI 下拉列表,然后选择了 user 表。然后,他们可能会访问他们不应该看到的数据。

关于Python 将变量放入 sql FROM 语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51371965/

相关文章:

python - 正则表达式的安全性

c# - C# 查询三张表

sql - 使用 PostgreSQL 中的一组值分组

sql - 基于 View 创建表——最快的方法,使用多线程

python - 我可以在 Django 中访问与其他默认数据库不同的数据库吗

python - 在 Tensorflow 1.2.0 中读取 CSV 文件

python - Windows 7/Vista 进程管理 - 如何在长时间空闲后启动外部程序?

python - 我想设置和管理我自己的本地 'autocomplete' ,这样我就可以在正确的框中填写密码

sql - 带分组+时间戳列的最新数据的物化 View

mysql - 在 MYSQL 中,如何获得 LEFT JOIN 返回一个表中的每一行,以及如果另一个表中存在任何匹配行则返回一个标志?