Python Can';使用SQLite从XML导入数据模型时,不能转义表名或列名

Python Can';使用SQLite从XML导入数据模型时,不能转义表名或列名,python,sqlite,Python,Sqlite,可能重复: 我想使用SQLite从XML文件导入整个数据模型,虽然我知道如何在查询中使用?语法以编程方式插入/转义值,但在创建表或列时,这不适用于表或列的名称。我可以简单地使用Python将其放在查询字符串中,但是这感觉不对,我认为应该有一种正确的方法来插入这些值以便它们被转义,以防止SQL注入。这里有一个类似的例子。看起来没有任何方法可以通过sqlite模块实现您的要求。大多数人只是字面上包含表名。如果您真的有妄想症,可以编写一个函数来查看表名是否有效,例如: import string

可能重复:

我想使用SQLite从XML文件导入整个数据模型,虽然我知道如何在查询中使用
语法以编程方式插入/转义值,但在创建表或列时,这不适用于表或列的名称。我可以简单地使用Python将其放在查询字符串中,但是这感觉不对,我认为应该有一种正确的方法来插入这些值以便它们被转义,以防止SQL注入。

这里有一个类似的例子。看起来没有任何方法可以通过sqlite模块实现您的要求。大多数人只是字面上包含表名。如果您真的有妄想症,可以编写一个函数来查看表名是否有效,例如:

import string

def isValidTableName(name):
    allowed_chs = string.letters + string.digits + '_'
    return len(name) == len([ch for ch in name if ch in allowed_chs])
表名通常限于字母、数字和下划线,因此这是检查注入的合理方法。只是不要让任何东西通过。

我在另一个问题中。下面是函数:

def quote_标识符,errors=“strict”):
可编码=s.编码(“utf-8”,错误)。解码(“utf-8”)
nul_index=encodable.find(“\x00”)
如果nul_索引>=0:
错误=UnicodeEncodeError(“NUL端接utf-8”,可编码,
nul_索引,nul_索引+1,“不允许nul”)
错误\u处理程序=编解码器。查找\u错误(错误)
替换,错误处理程序(错误)
可编码=可编码。替换(“\x00”,替换)
返回“\”+可编码。替换(“\”,“\”)+“\”
它不会警告您保留标识符,所以您必须自己担心