Pyodbc Python многострочный, если запись существует, обновить, иначе импортировать

Я очень новичок в Python, поэтому, надеюсь, я предоставлю информацию, необходимую для ответа на вопрос. Я пытаюсь обновить/вставить записи во вновь созданную базу данных. Я создал соединение с базой данных без проблем, я даже могу вставлять записи. Но когда я пытаюсь понять, что обновлять/вставлять, у меня возникает проблема. У меня есть кадр данных (DF1), который содержит 2 столбца (GovernmentID, Geometry).

вот код, который я использую:

DF1 = pd.read_csv("C:\\Users\\pvagis\\Documents\\Trajectories.csv")
    DF1 = DF1.astype({"GovernmentID": str, "Geometry": str})
    print(DF1.dtypes)
    cursor = sql_conn.cursor()
    i = 0
    while i <= (len(DF1)-1):
        DB_DATA={"DI_UWI":DF1.at[i,'GovernmentID'],
                 "DI_GEOM":DF1.at[i,'Geometry']}
        UpsertQuery = ("""
                 IF NOT EXISTS (select UWI from LAND_JEOPARDY_DI_API_WELL_PATHS where UWI = :DI_UWI)
                 INSERT INTO LAND_JEOPARDY_DI_API_WELL_PATHS (WELL_PATH, UWI) values (:DI_GEOM, :DI_UWI)
                 ELSE
                 UPDATE LAND_JEOPARDY_DI_API_WELL_PATHS SET WELL_PATH = :DI_GEOM where UWI = :DI_UWI
                 """)
        cursor.execute(UpsertQuery, DB_DATA)
        sys.stdout.write("\r{}% complete   ".format(int(i/len(DF1)*100)))
        i = i + 1
    sql_conn.commit()
    cursor.execute("Delete from LAND_JEOPARDY_DI_API_WELL_PATHS where WELL_PATH = 'nan'")
    sys.stdout.write("\r{}% complete   ".format(int(i/len(DF1)*100)))
    sql_conn.commit()
    cursor.close()
    sql_conn.close()

«UpsertQuery» - это то место, где у меня возникла проблема

Спасибо всем


person Noah_v    schedule 10.07.2020    source источник
comment
Вы можете предоставить трассировку или описать ошибку?   -  person M Z    schedule 11.07.2020
comment
Трассировка (последний последний вызов): файл ‹ipython-input-32-421dcd42b4b4›, строка 26, в ‹module› cursor.execute(UpsertQuery) Ошибка: ('07002', '[07002] [Microsoft][ODBC SQL Server Driver]COUNT поле неверно или синтаксическая ошибка (0) (SQLExecDirectW)')   -  person Noah_v    schedule 11.07.2020
comment
убедитесь, что вы предоставляете аргументы при запуске строки выполнения. cursor.execute(UpsetQuery, args)   -  person M Z    schedule 11.07.2020
comment
Поэтому я изменил приведенный выше код, чтобы использовать словарь в аргументах курсора, но теперь я получаю следующую ошибку: ProgrammingError: («SQL содержит 0 маркеров параметров, но был предоставлен 1 параметр», «HY000»). Можно ли здесь использовать словари? Я знаю, что вы можете использовать '?' как маркеры, но я не уверен, как это будет работать на нескольких строках... если это имеет смысл...   -  person Noah_v    schedule 11.07.2020
comment
Вы можете использовать подход, аналогичный описанному в ответе на этот вопрос.   -  person Gord Thompson    schedule 19.07.2020