使用pymysql
(一种MySQLdb
替代方法),我想知道用字符串替换数据库或字段名的更好方法是什么。例如:我们想创建一个数据库,它的名称来自一个变量(dbname = "test"
)。你知道吗
c.execute("CREATE DATABASE `test`;")
这不起作用,因为添加了引号。你知道吗
c.execute("CREATE DATABASE %s;", (dbname,))
这很容易受到sql注入的攻击。你知道吗
c.execute("CREATE DATABASE `{}`;".format(dbname))
有更好的主意吗?你知道吗
无法参数化诸如表或数据库名称之类的标识符,因此唯一可能的方法是执行一些检查,确保名称是安全的,然后使用字符串连接。你知道吗
根据MySQL documentation,引用的标识符可以包含从
U+0001
到U+FFFF
的任何Unicode字符。不允许使用NUL
字符和U+10000
以后的补充字符,因此您需要在任何给定名称中检查它们,如果发现任何异常,则引发异常。如果名称本身包含反勾号,则必须通过加倍对其进行转义。(或者,如果标识符包含任何反记号,则可以选择引发异常。)此外,标识符不能为空,尽管我很难看到MySQL文档指出了这一点。你知道吗
因此,一个合适的清除标识符的函数可以如下所示(我将由您填写详细信息):
那么你可以这样使用它:
相关问题 更多 >
编程相关推荐