将Python字符串传递到SQL查询时出现问题
将Python中的SQL查询传递给MS 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
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注入攻击)。始终使用参数化查询。。。