我从 JSON 格式的 webapp 获取数据,其中包括各种 python 转义字符,包括“\n”和“\r”
在将数据输入 sql 之前,我构建了一个小函数来清除有问题的字符和空格中的数据。(有问题的字符对使用 sql 的另一个应用程序有问题)。
当前的功能是:
bad_tokens = [",",";",".","!","'",".","-",'"',"@",r"\n",r"\r"]
from types import StringType, UnicodeType
def sql_text(sqltext, trim = None):
'''
helper function to clean text inserted to sql from Priority problematic characters specified bad_tokens
'''
thistype = type(sqltext)
if thistype not in (StringType, UnicodeType):
return sqltext
sqltext = sqltext.strip() #priority can't handle string starting with space
for token in bad_tokens:
sqltext = sqltext.replace(token,"")
sqltext = " ".join([i for i in sqltext.split(" ") if i != ""]) #priority can't handle string containing double spaces
if trim:
sqltext = sqltext[0:trim]
return sqltext
这种方法适用于常规字符,但似乎无法清除 \n 和 \r 转义符号。将 r (作为原始字符串)添加到转义符号也无济于事。
谢谢您的帮助
编辑:我使用的是 orm (sqlalchemy),所以我不直接访问 DBApi,虽然 sqlalchemy 会自动进行很多转义,因为 sql 将这些字符视为合法,sqlalchemy 也是如此。回到正轨 - 我需要正确清洁琴弦。