将 Python 字符串传递给 SQL 查询的问题

时间:2020-12-22 11:04:38

标签: python sql sql-server regex pyodbc

我在将 Python 中的 SQL 查询传递到 MS SQL 时遇到了一些问题。

正在谈论通过 pyodbc 检索一些代码,使用正则表达式对其进行编辑,然后将其传递回数据库的新表中。 我还尝试了一些 print()-Commands 以确保代码在 Python 中运行并以正确的方式进行编辑,但是在编辑字符串后我无法将这些内容写回 SQL。

我正在尝试通过以下方式传递字符串:

try:   
    values = ""
    for row in cursor.execute("select row1, row2 from db_table"):
        cleanheader = cleanhtml(str(row.row1))
        cleanbody = cleanhtml(str(row.row2))
        values = values + "('" + cleanheader + "','" + cleanbody + "'),"
    values[0:len(values)-1]
    values = values + ";"
    sql = "INSERT INTO db_new_table VALUES ('"+str(values)+"')"
    cursor.execute(sql)

cleanhtml() 指的是我的正则表达式函数:

def cleanhtml(raw_html):
    cleanr = re.compile('<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});')
    cleantext = re.sub(cleanr, '', raw_html)
    return cleantext

有人知道如何将这些行正确地传递给 SQL 吗?

2 个答案:

答案 0 :(得分:1)

通过创建辅助列表(public class CustomGlobalFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); //TODO: modify the two objects or wrap them in wrapper class... Mono<Void> result = chain.filter(exchange); byte[] requestData = getRequestData(request);//TODO: get request data from request object byte[] responseData = getResponseData(response);//TODO: get response data from response object //TODO: custom logic return result; } } )来附加来自游标的元组的每个已处理成员,并且更喜欢使用 {{1 }} 而不是 row 的性能更高,例如

executemany

答案 1 :(得分:0)

看起来您用单引号将 VALUES 块中的数据引用了两次。看来你也在搞乱那里的括号。在执行之前打印您的查询。

sql = "INSERT INTO db_new_table VALUES ('"+str(values)+"')"

此处的值已被引用并在括号中。