Я пытаюсь реализовать хранимую процедуру, которую я создал в SQL Server, через Visual Studio, используя файл CSV, который я создал с помощью панд.Хранимая процедура просто вводит данные из моего CSV-файла в целевую таблицу, вызванную в хранимой процедуре, однако я сталкиваюсь с ошибкой («42000», «[42000] [Microsoft] [Драйвер ODBC SQL Server] [SQL Server]».Неверный синтаксис рядом с '@ P1'. ") Каждый раз, когда я запускаю код Python, который я подробно описал ниже.
Я попробовал различные комбинации приведенного ниже кода и убедился, что моя целевая таблица структурирована как datetime для всех столбцов даты и времени, а varchar 50 - как столбец описания и области.
CA=pd.read_csv('10514697.csv') #Name of my CSV
CA["Date"]=pd.to_datetime(CA.Date,format='%d/%m/%Y') #Converting my date from object as in CSV to datetime as required
CA["TOC"]=pd.to_datetime(CA.TOC,format='%H:%M:%S')#Converting my TOC column from object to datetime and then converting it below to just time. I repeated this step for each time column in the CSV
CA["ORD"]=pd.to_datetime(CA.ORD,format='%H:%M:%S')
CA["MOB"]=pd.to_datetime(CA.MOB,format='%H:%M:%S')
CA["IA"]=pd.to_datetime(CA.IA,format='%H:%M:%S')
CA["LS"]=pd.to_datetime(CA.LS,format='%H:%M:%S')
CA["AH"]=pd.to_datetime(CA.AH,format='%H:%M:%S')
CA["MAV"]=pd.to_datetime(CA.MAV,format='%H:%M:%S')
CA["CD"]=pd.to_datetime(CA.CD,format='%H:%M:%S')
CA.Date=CA.Date.dt.date
CA["Station Area"] = CA["Station Area"].astype(str) # I convert the object to str, same done for description
CA["StationArea"]= CA["Station Area"] # I remove the space from the station area so it is a single word
CA.Description = CA.Description.astype(str)
CA.TOC = CA.TOC.dt.time
CA.ORD = CA.ORD.dt.time
CA.MOB = CA.MOB.dt.time
CA.IA = CA.IA.dt.time
CA.LS = CA.LS.dt.time
CA.AH = CA.AH.dt.time
CA.MAV = CA.MAV.dt.time
CA.CD = CA.CD.dt.time
import pypyodbc #establishing connection
connection = pypyodbc.connect('Driver=SQL Server;Server=CPX-YKJPS50NNO9\SQLEXPRESS;Database=ABCRetail')
try:
sqlCommand = "EXEC uspCSVInserts (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" #calling the required USP with the required amount of parameters
values = CA[['Date','StationArea', 'Description', 'TOC', 'ORD', 'MOB', 'IA', 'LS', 'AH', 'MAV', 'CD']].values.tolist() #converting all of the values in the CSV into a list for entry into the target table
cursor = connection.cursor()
cursor.executemany(sqlCommand, values) #The code fails at this point and does not progress to the commit stage
cursor.commit()
except Exception as ex:
print("Failed to execute stored procedure due to :", ex)
finally:
if (connection.connected):
connection.close()
Stored procedure code in SQL server is as follows:
@Date datetime,
@StationArea varchar(50),
@Description varchar(50),
@TOC datetime,
@ORD datetime,
@MOB datetime,
@IA datetime,
@LS datetime,
@AH datetime,
@MAV datetime,
@CD datetime
AS
INSERT into BigData
([Date], StationArea, [Description], TOC, ORD, MOB, IA, LS, AH, CD)
Values
(@Date, @StationArea, @Description, @TOC,@ORD, @MOB, @IA, @LS, @AH, @CD)
Я ожидал, что код будет проходить и вводить данные в моем CSV-файле в таблицу в моей базе данных сервера sql, но это постоянно приводит к сбою в деталях.