我想在SQL Server中插入一个html文件,但文档中有一些特殊的字符,我怎样才能逃避特殊的字符?
以下是我的代码:
import pymssql
import os
txt_file = u'E:/project/robot_framework/xxxx/logs/log-20170318-143134.html'
file_name = os.path.split(txt_file)[1]
conn = pymssql.connect(host='192.168.0.888',user='sa',password='xxxxx',database='Automation')
content = open(txt_file, 'r')
cur = conn.cursor()
sql = "insert into log_file (File_Name,RunID,File_VARCHAR_Content) values('%s',1,'%s')" % (file_name, content.readlines())
cur.execute(sql)
cur.close()
conn.close()
但是我得到了错误:
回溯(最近一次调用最后一次):文件" E:\ project \ robot_framework \ PythonDemo \ src \ try.py",第20行,in cur.execute(sql)文件" pymssql.pyx",第464行,在pymssql.Cursor.execute(pymssql.c:7491)pymssql.ProgrammingError: (102,"语法不正确'<' .DB-Lib错误消息20018,严重程度 15:\ n一般SQL Server错误:检查来自SQL的消息 Server \ nDB-Lib错误消息20018,严重级15:\ n一般SQL Server 错误:检查来自SQL Server的消息
答案 0 :(得分:0)
您可以使用python正则表达式库“re”。
import re
txt_file = u'E:/project/robot_framework/xxxx/logs/log-20170318-143134.html'
escaped_string = re.escape(txt_file)
答案 1 :(得分:0)
仅仅是因为这是我在首页上的第一个搜索结果:
如果不知道该代码的作用,请勿更改此代码!
conn = pymssql.connect(host='xxx.xxx.xxx.xxx',user='xxxxxxx',password='xxxxx',database='Whatever')
c=conn.cursor()
c.execute("SELECT id,KartenUid FROM Benutzer WHERE KartenUid=%s;",("b99cec01"))
row=c.fetchone()
#row=(UUID('6533f7d3-f190-45fd-95e0-72e3add0e9db'), 'b99cec01')
c.execute("SELECT id,KartenUid FROM Benutzer WHERE KartenUid=%s;",("b99cec01; DROP TABLE Benutzer;"))
row=c.fetchone()
#row=None
c.execute("SELECT id,KartenUid FROM Benutzer WHERE KartenUid=%s;",("b99cec01"))
row=c.fetchone()
#row=(UUID('6533f7d3-f190-45fd-95e0-72e3add0e9db'), 'b99cec01')
因此,为防止SQL注入(以及其他转义问题),请使用pymssql.Cursor.execute(sql, paramsAsTuple)
方法(请参见readTheDocs)。