在我的应用程序中,我使用 SQLAlchemy 和 mysql-connector-python。我想SELECT * FROM :table LIMIT 10在我的 mysql 数据库上执行这样的查询。但是我的代码不起作用
table_name = "tmp1"
QUERY = "SELECT * FROM :table LIMIT 10"
conn = create_sql_connection()
res = conn.execute(
QUERY,
{'table': table_name}
).fetchall()
print(res)
Run Code Online (Sandbox Code Playgroud)
我读到你不能使用表名作为参数,我应该只使用 python 字符串格式。但我真的很担心它绝对不能安全地防止 sql 注入。怎么解决呢?是否有任何实用程序可以转义我的表名变量?
Postgres 有一个解决方案 -在 psycopg2 中传递表名作为参数- 你知道在使用 mysql 时如何解决它吗?
您可以将用户提供的字符串传递给 Table 语句并从中构建查询:(这里我假设您从 post 请求 json 获取用户数据)
table_name_string = request.get_json().get('table')
selected_table = db.Table(table_name_string, metadata, autoload=True)
query = selected_table.select()
Run Code Online (Sandbox Code Playgroud)
如果您确实想要,此时您还可以继续使用此查询作为原始 sql 字符串
query_string = str(query)
Run Code Online (Sandbox Code Playgroud)
绝对建议进行一些输入验证或限制哪些表有效,但它是 sql 注入安全的,因为该表必须存在于元数据中,否则会抛出异常(sqlalchemy.exc.NoSuchTableError:)
| 归档时间: |
|
| 查看次数: |
4139 次 |
| 最近记录: |