在 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数据库

Python和SQL:用SQL的“Null”值替换DataFrame的空字符串,以将数据插入数据库中而不会出现格式错误[重复]

使用 Python 3.9 插入行 sql 语法错误

如何将返回的python JSON字典转换为字典中的列表,并将数据转换为SQL插入

如何在 Python 中从 Azure Databricks 插入 Azure SQL 数据库

使用 Python 将 Csv 文件写入 SQL Server 数据库中已有的表