Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 8, 2013 05:13:59

vak
От:
Зарегистрирован: 2007-05-04
Сообщения: 262
Репутация: +  0  -
Профиль   Отправить e-mail  

psycopg2 и спец. символы

Похоже “наступил на грабли”. Не корректно отрабатывает psycopg2 спец. символы (например %). Каким образом лучше их экранировать (как это сейчас народ делает)? Возможно в самом psycopg2 есть такой стандартный механизм? Подскажите плиз, кто в теме.



Отредактировано vak (Ноя. 8, 2013 05:15:49)

Офлайн

#2 Ноя. 8, 2013 05:35:49

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

psycopg2 и спец. символы

пример некорректной работы покажите



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Ноя. 8, 2013 05:44:44

vak
От:
Зарегистрирован: 2007-05-04
Сообщения: 262
Репутация: +  0  -
Профиль   Отправить e-mail  

psycopg2 и спец. символы

Вот код

def     NewD(user_kod,contragent,tema,text):
    user_kod = user_kod.encode("utf-8")
    contragent = contragent.encode("utf-8")
    tema = tema.encode("utf-8")
    text = text.encode("utf-8")
    cursor = connections['default'].cursor()
    cursor.execute("SELECT t_NewD('%s','%s','%s','%s');" % (user_kod,contragent,tema,text))
    transaction.commit_unless_managed()
    data = cursor.fetchone()
    return data[0]

Картинку с ошибкой прилагаю.



Прикреплённый файлы:
attachment Захват-1.jpg (77,4 KБ)

Офлайн

#4 Ноя. 8, 2013 05:50:11

vak
От:
Зарегистрирован: 2007-05-04
Сообщения: 262
Репутация: +  0  -
Профиль   Отправить e-mail  

psycopg2 и спец. символы

Вот еще ручками:

>>> NewD('','%','%','%')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/opt/kis/kis/lib/contract.py", line 81, in NewD
    cursor.execute("SELECT t_NewD('%s','%s','%s','%s');" % (user_kod,contragent,tema,text))
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 41, in execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py", line 54, in execute
    return self.cursor.execute(query, args)
IndexError: tuple index out of range



Офлайн

#5 Ноя. 8, 2013 07:15:01

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

psycopg2 и спец. символы

http://python.su/forum/topic/22574/?page=1#post-116842



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Ноя. 8, 2013 07:23:19

vak
От:
Зарегистрирован: 2007-05-04
Сообщения: 262
Репутация: +  0  -
Профиль   Отправить e-mail  

psycopg2 и спец. символы

PooH
http://python.su/forum/topic/22574/?page=1#post-116842


Спасибо, сейчас работает.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version