您好,我正在尝试制作一条 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/