我有var='smth'
,我需要检查表格'smtb'中是否存在var
我试过这个,但它不起作用:
rows=curs.fetchall()
for row in rows:
if var==row:
print("Yes")
当我打印行的元素时,我会得到一些这样的模式:
('element',)
如何检查表中是否存在var
?
答案 0 :(得分:2)
不要在Python中执行此操作。如果要在数据库表中搜索某些内容,最快捷,最有效的方法是在SQL中执行此操作。不要忘记使用bind variables。
假设您有一个游标对象curs
,它可能看起来像这样(假设您的表在var
上是唯一的)。
>>> sql = "select * from my_table where var = :var"
>>> bind_variables = {'var' : 'smth'}
>>>
>>> curs.execute(sql, bind_variables)
[<cx_Oracle.STRING with value None>]
>>> results = curs.fetchall()
>>> results
[('smth',)]
>>> try:
... var = results[0][0]
... print ('Yes')
... except IndexError:
... print ('No')
...
Yes
然后,如果您正在寻找不存在的东西,请获得以下内容。
>>> bind_variables = {'var' : 'other'}
>>> results = curs.fetchall()
>>> results
[]
>>> try:
... var = results[0][0]
... print ('Yes')
... except IndexError:
... print ('No')
...
No
您没有得到预期的实际原因是cx_Oracle按照PEP 249返回元组列表。您希望只返回一列,因此如果您想以您的方式进行操作,则需要访问元组的0 th 索引。
>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
... if var == row[0]:
... print ('Yes')
...
Yes