Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pymysql将数据库名称作为参数传递给sql语句_Python_Pymysql - Fatal编程技术网

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语句创建游标时,一切正常,但很快就会有跨不同数据库的连接,所以我想实现一些通用的安全机制来处理这个问题。