pyodb c Удалить оператор для SQL Сервер не удаляет строки, даже если оператор выполняется? - PullRequest
0 голосов
/ 05 августа 2020
def rmv_dupes_in_psumsdb(setoffilestoprocess, config):
    setoffilestoprocess_fnames = [file.name for file in setoffilestoprocess]
    constring = config['db_string']['db_string']
    cnxn = pyodbc.connect(constring)
    FilesToBeCrunched1000 = list(chunks(list(setoffilestoprocess_fnames), 2))
    for FilesChunks1000 in FilesToBeCrunched1000:
        sqlstring = 'DELETE FROM {0} WHERE [LOG] IN ('.format(config['db_string']['bd_psums_meta_table'])
        # print((FilesChunks1000))
        values_string = (', '.join("'" + item + "'" for item in FilesChunks1000))
        sqlstring+=values_string
        sqlstring+=')'
        cnxn.execute(sqlstring)

Скрипт вызывает эту функцию, но на стороне базы данных ничего не происходит. Я написал аналогичную функцию, которая выполняет оператор Select, и она работает. Но этого нет. Я распечатал (sqlstring), и он правильно дал мне следующий результат:

DELETE FROM [NSGWSAINLINE].[dbo].[bd_psums_meta] WHERE [LOG] IN ('0517312.002.7312-08.FRP.00.S25D._Yo9EXAOaDK6asQ2_.0.zip', '0503302.002.3302-20.FRP.00.S26A._obBBQu5GUT1pnKO_.0.zip')
DELETE FROM [NSGWSAINLINE].[dbo].[bd_psums_meta] WHERE [LOG] IN ('0524222.002.4222-08.FRP.00.S25D._cH03BJws2g1pnKO_.0.zip', '0532722.002.2722-15.92FIP.00.S26A._hR10vpeCvpsonKO_.0.zip')
DELETE FROM [NSGWSAINLINE].[dbo].[bd_psums_meta] WHERE [LOG] IN ('0524282.002.4282-25.FRP.00.S25D._0sOzWcCcEptonKO_.0.zip')

Я фактически пошел дальше и скопировал результаты выше, и они запустились на SQL сервере и выполнили операторы удаления. Так почему же это не работает изнутри Python?

1 Ответ

2 голосов
/ 05 августа 2020

Вы должны зафиксировать свои изменения после выполнения с помощью cnxn.commit(), если в вашем подключении не включена опция autocommit.

...