Joj*_*oji 4 python oracle cx-oracle
我正在尝试使用列中的结果创建一个列表。我执行查询并且结果没问题,但是当我使用list.append它们在列表中输入数据时,它们只返回[].
import cx_Oracle
con = cx_Oracle.connect('user/psw@localhost')
cur = con.cursor()
list = []
cur.execute('select column from table')
for result in cur.fetchall():
    list.append
    print (list)
cur.close()
con.close()
返回:
[]
[]
[]
当我将结果放入列表并返回一个索引时,就像results[0]他们只打印结果的第一个字母一样:
E
X
A
M
P
L
E
当我只是期待:
Example
我的代码有问题吗?最好的问候,社区!
您的代码有几个不同的问题。
1)
list.append
附加什么?append是一个列表对象的方法,你需要用一个参数来调用它。在你的情况下,
 list.append(result)
会做你所期望的 - 它附加result到名为list.
注意:这不会产生错误的原因是您甚至不调用该append函数,您只是引用它。在 Python 中,指令只是一个表达式是合法的——当作为脚本运行时,该表达式的结果将被悄悄丢弃(与交互式解释器相反,其中表达式的结果将自动为您打印)。
因此,例如42 == 7在脚本中的一行是完全合法的。它不会做任何事情(该表达式的结果, False, 将被默默丢弃),但它也不会导致错误。
2)
    print (list)
您在循环内执行此操作,这意味着循环的每次迭代都会执行一次- 在您的示例中执行3 次,因为显然select column from table给出了三个结果。上面的数字 1) 是您得到空列表 ( []) 的原因,这也是您得到 3 次空列表 ( [] [] []) 的原因。
您可能希望通过减少它的缩进(将它向左移动 4 个空格)将它移到循环之外- 然后列表的内容将只在循环结束时打印一次。
3)
当我将结果放入一个列表并返回一个索引时,就像
results[0]他们只打印结果的第一个字母一样 [...]
我不完全理解你的意思,但是:
在 Python 中,字符串就像列表一样,也是序列(字符串是字符序列)。这意味着一些操作可以在两者上完成,比如索引(sequence[index]语法)或循环它们(for item in sequence)。
现在,如果你得到这样的结果
E
X
A
M
P
L
E
在 Python 中,这意味着您以某种方式处理了一个真正是字符串的对象,这表明您假设它是一个列表(或某种其他类型的序列)。例如,如果
for item in results:
    print(item)
或者
for i in range(len(results)):
    print(results[0])
导致这种行为,那么results实际上是一个字符串,而不是您预期的列表。
总而言之,您可能想要这样的东西:
# ...
results = []
cur.execute('select column from table')
for row in cur.fetchall():
    results.append(row)
# print the entire list
print(results) 
# print the first row by addressing it via index
print(results[0])
# print the first column of the third row
print(results[2][0])
# ...
但请注意,游标结果始终是数据库行- 即使您只选择一列。