在cx_Oracle中搜索名称

时间:2013-03-06 02:31:29

标签: python oracle cx-oracle

我有var='smth',我需要检查表格'smtb'中是否存在var

我试过这个,但它不起作用:

rows=curs.fetchall()
for row in rows:
            if var==row:
                print("Yes")

当我打印行的元素时,我会得到一些这样的模式:

('element',)

如何检查表中是否存在var

1 个答案:

答案 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