Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 25, 2010 03:12:52

Trimso
От:
Зарегистрирован: 2010-12-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование кавычек

Приветствую!

Подскажите, пожалуйста, как надо работать с кавычками.
Код:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import MySQLdb

# DB connect
db = MySQLdb.connect(host="127.0.0.1", user="user", passwd="pass", db="testdb", charset='utf8')
cursor = db.cursor()

content = "==='==="

sql = """INSERT INTO test( content ) VALUES ( %(content)s )""" % { 'content':content }
cursor.execute(sql)
db.commit()
Ошибка:
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use
near '==='=== )' at line 1")
Таблица простая, привожу на всякий случай:
CREATE TABLE IF NOT EXISTS `test` (
`content` varchar(256) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Очевидно, что проблема в одинарной кавычке, однако, драйвер MySQL должен был о ней позаботиться. Или я ошибаюсь?



Офлайн

#2 Дек. 25, 2010 04:35:31

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование кавычек

драйвер позаботится, если подстановку делать правильно:

cursor.execute("INSERT INTO test (content) VALUES (%(content)s)",  { 'content': content })
или
cursor.execute("INSERT INTO test (content) VALUES (%s)",  [content])



Офлайн

#3 Дек. 25, 2010 10:22:45

Trimso
От:
Зарегистрирован: 2010-12-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование кавычек

То есть в моём случае до драйвера не доходило - я пихал аргументы в строку до него.
Спасибо за помощь!



Офлайн

#4 Авг. 24, 2012 08:47:17

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование кавычек

Метод форматирования строк…

Например:

o = 'orange'
p = 'potatoes'
pep ='pepper'
val = 'fruit {0}, vegetable \{{1}, {2}\}' .format(o, p, pep)
print val

Почему не экранируются \{ \} ?



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#5 Авг. 24, 2012 10:31:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Экранирование кавычек

>>> o = 'orange'
>>> p = 'potatoes'
>>> pep ='pepper'
>>> val = 'fruit {0}, vegetable {{{1}, {2}}}' .format(o, p, pep)
>>> print val
fruit orange, vegetable {potatoes, pepper}
>>>



Офлайн

#6 Авг. 24, 2012 14:18:32

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Экранирование кавычек

Спасибо!
А как в таком случае?:

import json
from collections import OrderedDict
city = 1
json_arg = json.dumps(OrderedDict([
                                           ("celebration_type","party"),
                                           ("town_id", "???? city")],
                                          )) 
 
print json_arg

Мне нужно чтобы значение переменной city подставлялось в “town_id” в кавычках…



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#7 Авг. 24, 2012 17:58:55

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Экранирование кавычек

Seganapa
Мне нужно чтобы значение переменной city подставлялось в “town_id” в кавычках…

В конкретном случае, при использовании json, если ему передать строку, то она будет в кавычках:
...
("town_id", str(city))
...

Просто подстановка:
print '"%s"' % city

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version