将Python字符串传递到SQL查询时出现问题

将Python字符串传递到SQL查询时出现问题,python,sql,sql-server,regex,pyodbc,Python,Sql,Sql Server,Regex,Pyodbc,将Python中的SQL查询传递给MS SQL时遇到了一些问题 我们正在讨论通过pyodbc检索一些代码,用regex编辑它,并将其传递回数据库的新表中。 我还尝试了一些print() 我正在尝试通过以下方式传递字符串: try: values = "" for row in cursor.execute("select row1, row2 from db_table"): cleanheader = cleanht

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

我们正在讨论通过
pyodbc
检索一些代码,用regex编辑它,并将其传递回数据库的新表中。 我还尝试了一些
print()

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

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
def cleanhtml(原始html):
cleanr=re.compile('&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});'))
cleantext=re.sub(cleanr',原始html)
返回干净文本

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

看起来您用单引号在值块中引用了两次数据。看来你也把括号搞乱了。在执行查询之前打印出查询

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

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

通过创建一个辅助列表(
)来附加来自游标的元组的每个已处理成员,使用一个准备好的语句,而不是易受SQL注入攻击的串联语句,并且更喜欢使用
executemany
而不是
execute
,因为这样更有效

row=[]
for i in cursor.execute("SELECT col1, col2 FROM db_table"):
        cleanheader = cleanhtml(str(i[0]))
        cleanbody = cleanhtml(str(i[1]))
        row.append((cleanheader,cleanbody),)        

for i in row:
        cursor.executemany('INSERT INTO db_new_table VALUES(?,?)',([i]))

con.commit()
con.close

永远不要使用字符串连接将数据添加到SQL查询中。这是一个巨大的安全漏洞(SQL注入攻击)。始终使用参数化查询。。。