我是一个python新手,使用cx_Oracle
python包来执行sql查询:
cursor.execute("select tablespace_name from user_tablespaces")
从oracle 11g数据库中检索列表。结果如下所示:
('SYSTEM',)
('SYSAUX',)
('UNDOTBS1',)
('TEMP',)
('USERS',)
我需要从每个条目中删除单引号和逗号,然后将其放入数组中,并尝试使用python切片来执行此操作:
tablespaceNames = []
for result in cursor:
tablespaceNames.append(result[2:-3])
然而,这只是在我的数组中给我空字符串:
()
()
()
()
我从查询结果中得到的对象是问题,还是我使用python切片错了?
答案 0 :(得分:2)
tableNameSpaces = [item [0][2:-3] for item in cursor]
引号将在,因为你正在处理字符串文字。 然而,一旦你打印出来,报价就会消失。
正如nicarus向我指出的那样,可能你根本不想截断你的字符串文字,尽管我认为这就是你想要的。
在这种情况下,它只是:
tableNameSpaces = [item [0] for item in cursor]
答案 1 :(得分:2)
您正在切割表示每个检索到的行的元组,而不是作为这些行的第一个(也是唯一的)元素的字符串。此外,您不需要“删除引号” - 这只是解释器尽力表示数据结构。
您的数据库返回以下结构的等效项 - 元组列表。由于您只选择了一个字段,因此每个元组只包含一个元素。
data = [
('SYSTEM',),
('SYSAUX',),
('UNDOTBS1',),
('TEMP',),
('USERS',)
]
首先让我们提取这些单个元素,给自己一个字符串列表,而不是元组列表。
sdata = [s[0] for s in data]
print(sdata)
您将看到的输出是
['SYSTEM', 'SYSAUX', 'UNDOTBS1', 'TEMP', 'USERS']
然后打印出元组中的每个字符串:
for s in sdata:
print(s)
此代码的输出为
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
参见 - 没有引号!