Python 使用pymysql将数据库名称作为参数传递给sql语句
我想将数据库作为参数传递Python 使用pymysql将数据库名称作为参数传递给sql语句,python,pymysql,Python,Pymysql,我想将数据库作为参数传递 sql = 'SELECT * FROM %s.table1' values = 'db-1' cursor.execute(sql, values) 问题是%s使用单引号转义,并生成错误: 错误代码:1064。您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 第1行“qualys_scan.”附近使用的语法 另一方面,使用简单的参数替换: “从%s.table1中选择*。格式(值) 可通过sql注入进行利用 如何处理这个问题有什么建议吗? 针对
sql = 'SELECT * FROM %s.table1'
values = 'db-1'
cursor.execute(sql, values)
问题是%s使用单引号转义,并生成错误:
错误代码:1064。您的SQL语法有错误;检查
与右边的MySQL服务器版本相对应的手册
第1行“qualys_scan.”附近使用的语法
另一方面,使用简单的参数替换:
“从%s.table1中选择*。格式(值)
可通过sql注入进行利用
如何处理这个问题有什么建议吗?
针对不同mysql模块的方法也会有所帮助
尊敬的Jano你可以做如下的事情
values = 'db-1'
sql = 'SELECT * from {val}.table1'.format(val=values)
print(sql) # 'SELECT * from db-1.table1'
然后您可以执行conn.execute(sql)
多个参数的另一个示例:
query_string = 'SELECT * from {tablename} WHERE DATE(End_time) = "{date}"'.format(tablename=table,date=date)
就你而言:
sql = 'SELECT * FROM {database}.table1'
values = 'db-1'
cursor.execute(sql.format(database=values))
只有当值(在本例中为db名称)来自不受信任的源时,SQL注入才会出现问题,即使这样,您也可以手动清理db名称
话虽如此,将db名称传递给
连接
对象可能会更容易-最终保留db_name:connection的映射,以避免每次重新打开新连接。祝贺你,所有脚本小子都会非常乐意破坏你的数据库。有人吗?目前我使用的是USE db_name;sql语句创建游标时,一切正常,但很快就会有跨不同数据库的连接,所以我想实现一些通用的安全机制来处理这个问题。