在 python 中,将数据插入 SQL Server 时如何转义特殊字符?
Posted
技术标签:
【中文标题】在 python 中,将数据插入 SQL Server 时如何转义特殊字符?【英文标题】:In python how to escape the special char when insert data into the SQL Server? 【发布时间】:2017-03-20 06:38:53 【问题描述】:我想在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()
但我得到了错误:
Traceback(最近一次调用最后一次):文件“E:\project\robot_framework\PythonDemo\src\try.py”,第 20 行,在 cur.execute(sql) 文件“pymssql.pyx”,第 464 行,在 pymssql.Cursor.execute (pymssql.c:7491) pymssql.ProgrammingError: (102,“'
【问题讨论】:
【参考方案1】:你可以使用python正则表达式库“re”。
import re
txt_file = u'E:/project/robot_framework/xxxx/logs/log-20170318-143134.html'
escaped_string = re.escape(txt_file)
【讨论】:
嘿 Mustafa,我创建了这个 escaped_string,但我仍然无法将这个字符串插入我的 microsoft sql server...任何线索为什么会发生这种情况? 投反对票,因为re.escape
转义了与正则表达式相关的特殊字符,而不是 sql 语句。
他的问题是txt文件中的特殊字符,所以他不需要转义sql语句来解决。【参考方案2】:
仅仅因为这是我在起始页上的第一个搜索结果:
如果您不知道它的作用,请不要更改此代码!
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)。
【讨论】:
以上是关于在 python 中,将数据插入 SQL Server 时如何转义特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章
Python和SQL:用SQL的“Null”值替换DataFrame的空字符串,以将数据插入数据库中而不会出现格式错误[重复]
如何将返回的python JSON字典转换为字典中的列表,并将数据转换为SQL插入