我想传递数据库作为参数
sql = 'SELECT * FROM %s.table1'
values = 'db-1'
cursor.execute(sql, values)
问题是%s是使用单引号转义的,它会产生错误:
错误代码:1064。您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行''qualys_scan'.new_table'附近使用正确的语法
另一方面使用简单的参数替换:
'SELECT * FROM%s.table1'.format(values)
可以通过sql注入来利用。
有任何建议如何处理这个?不同的mysql模块的方法也会有所帮助
此致,Jano
如果值(在本例中为db名称)来自不受信任的源,则SQL注入只是一个问题,即使这样,您也可以手动清理数据库名称。
这就是说,将db名称传递给connection
对象可能更容易 - 最终保留db_name:connection的映射以避免每次重新打开新连接。
你可以做类似下面的事情
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))