Найти - Пользователи
Полная версия: sql_str.replace('ковычка', 'обратный слеш+ковычка+ковычка')
Начало » Базы данных » sql_str.replace('ковычка', 'обратный слеш+ковычка+ковычка')
1
Borigor
для записи в локальную базу MySQL использую из пакета subprocess

from subprocess import Popen, PIPE

...
sql = sql.replace('"', '\""').replace("'", "\''")
Popen("mysql test -e \"%s\"" % (sql), shell=False, stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate()
SQL запрос формируется диначески, и приходят в него в том числе и ковычки, одинарные и двойные.
После долгих экспериментов получил, что запись происходит, только если осуществить преобразования наподобие указанных в сабже.
Но вот почему так, не могу понять.

г-да Гуру, объясните, пожалуйста.
Андрей Светлов
Пример неправильный. Я вижу лишь

Popen('mysql test -e “%s”' % (sql), shell=False, stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate()
Андрей Светлов
Popen(, stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate()
Андрей Светлов
Держите вдогонку: http://asvetlov.blogspot.com/2011/03/subprocess.html
Borigor
Андрей Светлов
Popen(, stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate()
Спасибо, Андрей, за поправку в вызове!
Но все же из чисто спортивного интереса хотелось бы знать, какое такое полезное действо (для целей исполнения SQL запроса) производят замены:
sql = sql.replace('"', '\""').replace("'", "\''")
Андрей Светлов
Операционная система какая? Windows или таки Linux?
Borigor
Андрей Светлов
Операционная система какая? Windows или таки Linux?
Windows
Андрей Светлов
Тогда - просто.
Вы экранировали кавычками ваш вызов mysql. Это - прокатило.
Если желаете знать “почему” - да потому что mysql “скушал” ваш запрос - он линуксовый по природе и его правила подошли, а windows их тоже пропустил.
И тем не менее используйте список для этих целей.

Подробности найдете в list2cmdline для модуля subprocess.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB