0

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

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

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

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

('element',)

如何检查var表中是否存在?

4

1 回答 1

2

不要在 Python 中这样做。如果您想在数据库表中搜索某些东西,迄今为止最快和最有效的方法是在 SQL 中进行。不要忘记使用绑定变量

假设您有一个游标对象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索引,如果您想按照自己的方式进行操作。

>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
...     if var == row[0]:
...         print ('Yes')
...
Yes
于 2013-03-06T08:31:45.787 回答