Я пытаюсь выполнить оператор sql с помощью python, возвращает ошибку.
Я в основном пытаюсь вставить несколько записей csv из папки в sql.
Я хотел бы вставлять записи csv построчно в sql, не создавая фрейм данных.
Я сделал переменную со строкой, содержащей оператор sql. Я использую эту переменную в функции выполнения. так -
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)')
Спасибо.
Вы не разделяете ?
, переданное между новыми строками, запятой, например:
'values(?,?,?,?,?,?' \
'?,?,?,?,?,?,?'\
Нет, когда первая строка и вторая строка объединяются, они образуют строку следующим образом:
values(?,?,?,?,?,??,?,?,?,?,?,?
# note ^^
Поэтому вам нужно обязательно добавить запятую после завершающего ?
в каждой строке, кроме последней.