Найти - Пользователи
Полная версия: Не проходит условие if на наличие элемента в кортеже (unicode)
Начало » Python для новичков » Не проходит условие if на наличие элемента в кортеже (unicode)
1
ruff3d
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 … как провести данную проверку?
спасибо)
EBFE
(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
ruff3d
спасибо! вопрос решен)
odnochlen
Или распаковать все кортежи. Не вижу смысла их хранить в таком формате.
reclosedev
Может доверить SQL базе проверку наличия элемента?
cursor.execute('SELECT val FROM t where val = %s', (val,)) 
if cursor.fetchone() is None:
    # insert
odnochlen
Да что вы, про SQL инъекции никогда не слышали? А если в val ' ?

google/python sql parameterised query
Chern
odnochlen
Да что вы, про SQL инъекции никогда не слышали?

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

odnochlen
Параметризированные запросы и printf формат поддерживают? Имхо лучше таки юзать (?), чтобы с первого взгляда отличать.
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