Я пытаюсь выполнить оператор SQL с помощью Python, возвращает ошибку.
Я в основном пытаюсь вставить несколько записей CSV из папки в SQL.Я хотел бы вставлять записи CSV строка за строкой в SQL без создания фрейма данных.Я сделал переменную, которая имеет строку, которая содержит заявление SQL.Я использую эту переменную в функции execute.вот так - cur1.execute(sql_query, row)
import os
import csv
import pyodbc
import time
conn1 = pyodbc.connect(r'Driver={SQL Server};'
r'Server=Servername;'
r'Database=Testing;'
r'Trusted_Connection=yes;')
cur1 = conn1.cursor()
start = time.time()
sql_query ='INSERT INTO testing01( EmployeeID'\
',EmployeeName'\
',ProjectID'\
',WBSElement'\
',StartDate'\
',EndDate'\
',AbsenceAttendanceHours'\
',AllocationPercent'\
',CRMID'\
',PCMTID'\
',ProjectPracticeID' \
',ProjectSBU' \
',SBUAbbrivation' \
',ProjSBUName' \
',ProjectPractice'\
',EmployeeSBU' \
',EmployeePractice' \
',EmployeeSubPractice' \
',ProjectProfile' \
',ProjectReason' \
',BillType' \
',SubBillType'\
',CustomerName'\
',ProjectManagerID'\
',ProjectManager'\
',DeliveryManagerID' \
',DeliveryManager' \
',SupervisorID' \
',Supervisor'\
',RoleSite'\
',RoleID' \
',C' \
',ActivityType' \
',RoleStatus' \
',CountryName' \
',EmployeeGrade' \
',JoiningDate' \
',ResourceGroup'\
',PersonnelArea' \
',PersonnelSubArea' \
',CustomerSite' \
',LastWorkingDayDate' \
',NameofEEsubgroup'\
',RoleName'\
',StreamName'\
',SkillName'\
',SkillGroup'\
',PrimarySkill'\
',Billability'\
',AmtInLocCur'\
',Currency'\
',RoleFTE'\
',OffshoreAmount'\
',OnsiteAmount'\
',EmployeeStatus'\
',BusinessLead'\
',BusinessLeadName)' 'values(?,?,?,?,?,?' \
'?,?,?,?,?,?,?'\
'?,?,?,?,?,?' \
'?,?,?,?,?' \
'?,?,?,?,?,?' \
'?,?,?,?,?,?' \
'?,?,?,?,?,?' \
'?,?,?,?,?,?' \
'?,?,?,?,?,?' \
'?,?,?,?)'
for files in os.listdir("C://Users/XXX/Desktop/ABC/ZCP/"):
print(files)
with open("C://Users/XXX/Desktop/ABC/ZCP/" + files, "r") as file:
readercsv = csv.reader(file)
next(readercsv)
for row in readercsv:
cur1.execute(sql_query, row)
conn1.commit()
print("success attrition")
end = time.time()
print(end - start)
Я хочу знать необходимые изменения, чтобы это заработало.Я получаю ошибку:
cur1.execute(sql_query, row)
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Must declare the scalar variable "@P6@P7". (137) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. (8180)')
Спасибо.