Уведомления

Группа в Telegram: @pythonsu

#1 Июль 31, 2012 08:54:52

ruff3d
Зарегистрирован: 2012-05-09
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Не проходит условие if на наличие элемента в кортеже (unicode)

cursor.execute('SELECT DISTINCT val FROM t')
mylist=cursor.fetchall()
if val not in mylist:
         cursor.execute('INSERT INTO t (val) VALUES (%s)',val)

print кортеж выводит так:
(u'15412',), (u'15312',), (u'14892',), (u'15373',), (u'15372',), (u'15192',), (u'15332',), (u'15272',), (u'15212',), (u'15072',), (u'15252',), (u'15172',), (u'15152',), (u'15112',), (u'14554',), (u'15132',), (u'15092',), (u'14872',), (u'15052',), (u'15032',), (u'15012',), (u'14972',), (u'14952',), (u'14832',), (u'14932',), (u'14853',), (u'14772',), (u'14233',), (u'14852',), (u'14692',), (u'14552',), (u'14833',), (u'14792',),…….

print val выводит так:
15412

пробовал и unicode(), и encode … как провести данную проверку?
спасибо)

Отредактировано ruff3d (Июль 31, 2012 08:55:40)

Офлайн

#2 Июль 31, 2012 10:06:27

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Не проходит условие if на наличие элемента в кортеже (unicode)

(val,) not in mylist

>>> x=(u'15412',), (u'15312',), (u'14892',), (u'15373',), (u'15372',)
>>> x
((u'15412',), (u'15312',), (u'14892',), (u'15373',), (u'15372',))
>>> v = u'15412'
>>> v in x
False
>>> (v,) in x
True

Отредактировано EBFE (Июль 31, 2012 10:07:34)

Офлайн

#3 Июль 31, 2012 11:06:40

ruff3d
Зарегистрирован: 2012-05-09
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Не проходит условие if на наличие элемента в кортеже (unicode)

спасибо! вопрос решен)

Офлайн

#4 Июль 31, 2012 18:14:08

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Не проходит условие if на наличие элемента в кортеже (unicode)

Или распаковать все кортежи. Не вижу смысла их хранить в таком формате.

Офлайн

#5 Авг. 1, 2012 08:58:49

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

Не проходит условие if на наличие элемента в кортеже (unicode)

Может доверить SQL базе проверку наличия элемента?

cursor.execute('SELECT val FROM t where val = %s', (val,)) 
if cursor.fetchone() is None:
    # insert

Офлайн

#6 Авг. 1, 2012 16:03:29

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Не проходит условие if на наличие элемента в кортеже (unicode)

Да что вы, про SQL инъекции никогда не слышали? А если в val ' ?

google/python sql parameterised query

Офлайн

#7 Авг. 1, 2012 17:08:29

Chern
От: Киев
Зарегистрирован: 2010-09-15
Сообщения: 71
Репутация: +  3  -
Профиль   Отправить e-mail  

Не проходит условие if на наличие элемента в кортеже (unicode)

odnochlen
Да что вы, про SQL инъекции никогда не слышали?

cursor.execute('SELECT val FROM t where val = %s', (val,))
cursor.execute('SELECT val FROM t where val = %s' % (val,))



Офлайн

#8 Авг. 2, 2012 02:06:26

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Не проходит условие if на наличие элемента в кортеже (unicode)

Параметризированные запросы и printf формат поддерживают? Имхо лучше таки юзать (?), чтобы с первого взгляда отличать.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version