如何操纵来自 cx_Oracle 的查询结果
How manipulate query results from cx_Oracle
我正在尝试创建一个包含列结果的列表。我执行了查询,结果没问题,但是当我使用 list.append
在列表中输入数据时,它们 return 只是 []
.
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()
Return:
[]
[]
[]
当我将结果放入列表和 return 索引时,例如 results[0]
他们只打印结果的第一个字母,例如:
E
X
A
M
P
L
E
当我刚刚期待:
Example
我的代码有问题吗?最好的问候,社区!
如果您尝试 运行 sql select 某些工具(如 DB 可视化工具)的语句,您的结果是什么样的?这只会确认您的 sql 声明没有任何问题。
在我使用 cx_Oracle 的项目中,我有一个用于查询我的 oracle 数据库的函数,如下所示。您可以将 sql 语句作为 sql 传递给函数。
def execute_query_result_set(sql, args=(), one=False):
print "execute_query_result_set()"
con = ""
con = cx_Oracle.connect(_connection_string)
try:
cursor = con.cursor()
cursor.execute(sql)
results = cursor.fetchall()
return results
finally:
if con != "":
con.close()
此函数return是查询结果的列表。如果您 select 不止一列,它将 return 作为元组列表 [('value', 'other'), ('another', 'row'), ('some', 'more'), ('etc', 'etc')]
如果不想调用单独的函数,您可以直接执行
con = cx_Oracle.connect(your_db_connection_string)
cursor = con.cursor()
cursor.execute(your_sql_select_statement)
results = cursor.fetchall()
con.close()
然后变量 results 应该是你的结果列表,然后你可以用这个列表做任何你需要的事情。希望这会有所帮助
您的代码存在几个不同的问题。
1)
list.append
附加什么? append
是列表对象的方法,您需要使用 参数 来调用它。在你的情况下,
list.append(result)
会按照您的预期进行 - 它将 result
附加到名为 list
.
的列表中
注意:这不会产生错误的原因是你甚至没有调用 append
函数,你只是引用它。
在 Python 中,指令只是一个表达式是合法的 - 当 运行 作为脚本时,该表达式的结果将被静默丢弃(与交互式解释器相反,其中表达式的结果将自动为您打印)。
因此,例如在脚本中的一行中使用 42 == 7
是完全合法的。它不会做任何事情(该表达式的结果 False
将被静默丢弃),但它也不会导致错误。
2)
print (list)
您在循环内执行此操作,这意味着循环的每次迭代将执行一次 - 在您的示例中执行 3 次,因为显然 select column from table
给出三个结果。上面的数字 1) 是你得到一个空列表的原因 ([]
),这就是你三次得到空列表的原因 ([] [] []
)。
您可能希望通过减少缩进(向左移动 4 个空格)将此 移出 循环 - 这样列表的内容将只打印一次,在循环结束时。
3)
When I put the results in to a list and return an index, like results[0]
they just print the first letter of the results like [...]
我不完全明白你的意思,但是:
在Python中,字符串和列表一样,也是序列(字符串是字符的序列)。这意味着某些操作可以在两者上完成,例如索引(sequence[index]
语法)或循环它们(for item in sequence
)。
现在,如果你得到像
这样的结果
E
X
A
M
P
L
E
在 Python 中,这意味着您处理的对象实际上是 字符串 ,这表明您假设它是 list(或其他某种序列)。例如,如果
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])
# ...
不过请注意,游标结果始终是 数据库行 - 即使您只是 select 一列。
我正在尝试创建一个包含列结果的列表。我执行了查询,结果没问题,但是当我使用 list.append
在列表中输入数据时,它们 return 只是 []
.
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()
Return:
[]
[]
[]
当我将结果放入列表和 return 索引时,例如 results[0]
他们只打印结果的第一个字母,例如:
E
X
A
M
P
L
E
当我刚刚期待:
Example
我的代码有问题吗?最好的问候,社区!
如果您尝试 运行 sql select 某些工具(如 DB 可视化工具)的语句,您的结果是什么样的?这只会确认您的 sql 声明没有任何问题。
在我使用 cx_Oracle 的项目中,我有一个用于查询我的 oracle 数据库的函数,如下所示。您可以将 sql 语句作为 sql 传递给函数。
def execute_query_result_set(sql, args=(), one=False):
print "execute_query_result_set()"
con = ""
con = cx_Oracle.connect(_connection_string)
try:
cursor = con.cursor()
cursor.execute(sql)
results = cursor.fetchall()
return results
finally:
if con != "":
con.close()
此函数return是查询结果的列表。如果您 select 不止一列,它将 return 作为元组列表 [('value', 'other'), ('another', 'row'), ('some', 'more'), ('etc', 'etc')]
如果不想调用单独的函数,您可以直接执行
con = cx_Oracle.connect(your_db_connection_string)
cursor = con.cursor()
cursor.execute(your_sql_select_statement)
results = cursor.fetchall()
con.close()
然后变量 results 应该是你的结果列表,然后你可以用这个列表做任何你需要的事情。希望这会有所帮助
您的代码存在几个不同的问题。
1)
list.append
附加什么? append
是列表对象的方法,您需要使用 参数 来调用它。在你的情况下,
list.append(result)
会按照您的预期进行 - 它将 result
附加到名为 list
.
注意:这不会产生错误的原因是你甚至没有调用 append
函数,你只是引用它。
在 Python 中,指令只是一个表达式是合法的 - 当 运行 作为脚本时,该表达式的结果将被静默丢弃(与交互式解释器相反,其中表达式的结果将自动为您打印)。
因此,例如在脚本中的一行中使用 42 == 7
是完全合法的。它不会做任何事情(该表达式的结果 False
将被静默丢弃),但它也不会导致错误。
2)
print (list)
您在循环内执行此操作,这意味着循环的每次迭代将执行一次 - 在您的示例中执行 3 次,因为显然 select column from table
给出三个结果。上面的数字 1) 是你得到一个空列表的原因 ([]
),这就是你三次得到空列表的原因 ([] [] []
)。
您可能希望通过减少缩进(向左移动 4 个空格)将此 移出 循环 - 这样列表的内容将只打印一次,在循环结束时。
3)
When I put the results in to a list and return an index, like
results[0]
they just print the first letter of the results like [...]
我不完全明白你的意思,但是:
在Python中,字符串和列表一样,也是序列(字符串是字符的序列)。这意味着某些操作可以在两者上完成,例如索引(sequence[index]
语法)或循环它们(for item in sequence
)。
现在,如果你得到像
这样的结果E
X
A
M
P
L
E
在 Python 中,这意味着您处理的对象实际上是 字符串 ,这表明您假设它是 list(或其他某种序列)。例如,如果
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])
# ...
不过请注意,游标结果始终是 数据库行 - 即使您只是 select 一列。