我有一个python函数,该函数构建一个TSQL字符串,该字符串在表中插入一条记录。在其中一个值包含单引号的情况下,我遇到了问题。这是ETL的一部分,我们从其中读取Excel文件或数据库。
import xlrd
import pandas as pd
from datetime import datetime
import pyodbc
import sys
server_name = 'Server1'
db_name = 'Database1'
sqlConnection = pyodbc.connect('DRIVER={SQL Server};SERVER=' + server_name + ';DATABASE=' + db_name + ';Trusted_Connection=yes')
# I have another function that reads Firstname, Lastname, Phone_Number, Address from a spreadsheet into a list named spreadsheet_data.
def InsertEmployee(spreadsheet_data, sqlConnection):
FirstName = spreadsheet_data[0]
LastName = spreadsheet_data[1]
Phone_Number= spreadsheet_data[2]
Address = spreadsheet_data[3]
queryEmployeeRecordInserted = """INSERT INTO Database1.dbo.Employee_Info (FirstName, LastName, Phone_Number, Address)
VALUES (?,?,?,?) """
query = queryEmployeeRecordInserted
cursor = sqlConnection.cursor()
cursor.execute(query, valuesEmployeeRecord)
cursor.close()
sqlConnection.commit()
================================================ ============
如果我使用此函数并且姓氏中带有引号(例如:O'Neill),则代码将失败,并且会出现错误: (102)(SQLExecDirectW); [42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]字符串后的右引号...
我应该如何处理代码以在值中包含引号(')?
答案 0 :(得分:0)
我找到了解决方案。昨天尝试过此操作,但由于某种原因它没有起作用。我在变量中用两个('')替换了引号(')。在整个数据帧中执行此操作可能更快,但目前可以正常工作。
def InsertEmployee(spreadsheet_data, sqlConnection):
FirstName = spreadsheet_data[0]
LastName = str(spreadsheet_data[1]).replace("'", "''")
Phone_Number= spreadsheet_data[2]
Address = spreadsheet_data[3]