Страницы

Поиск по вопросам

суббота, 21 марта 2020 г.

Поиск и удаление строки с unicodeescape в mssql на python

#python #sql #python_3x #sql_server


В SQL таблице есть столбец sc_path, в котором содержится запись C:\Users\elebedev\Desktop\Python
Мне нужно удалить все строки в таблице содержащие эту запись.

from sqlalchemy import create_engine 


path=r'C:\Users\elebedev\Desktop\Python'

con_log = create_engine('mssql+pymssql://log:pass@s1c/base')
sql_log = "DELETE FROM python_log WHERE CONVERT(NVARCHAR, sc_path) = '{}' ".format(path)
with con_log.begin() as conn:
    conn.execute(sql_log)


Код выполняется, но он не видит эти строки. Как мне кажется, что это из за unicodeescape
символа, но это не точно. 

Подскажите, как быть? 
    


Ответы

Ответ 1



Вы используете raw string - соответственно Python сам "заэкранирует" обратные слеши: In [57]: path=r'C:\Users\elebedev\Desktop\Python' In [58]: path Out[58]: 'C:\\Users\\elebedev\\Desktop\\Python' Если вас интересуют строки, начинающиеся с данной подстроки, то запрос нужно изменить: sql_log = "DELETE FROM python_log WHERE CONVERT(NVARCHAR, sc_path) like CONVERT(NVARCHAR, %s)" parms = (f"{path}%", ) # NOTE: ^ ^ con_log.execute(sql_log, parms)

Ответ 2



Удалить как хотелось не получилось. Сделал чуток по другому. Но изначальным вариантом было бы интересней. from sqlalchemy import create_engine path='elebedev' con_log = create_engine('mssql+pymssql://login:passw@server/base') sql_log = "DELETE FROM python_log WHERE CONVERT(NVARCHAR, sc_path) like %s" parms = (f"%{path}%", ) # NOTE: ^ ^ ^ con_log.execute(sql_log, parms)

Комментариев нет:

Отправить комментарий