Нарезка переменной Python удаляет всю строку

Я новичок в 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?

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

Смотрите - без кавычек!

tableNameSpaces = [item [0][2:-3] for item in cursor]

Кавычки будут, тем не менее, поскольку вы имеете дело со строковыми литералами. Однако, как только вы напечатаете их, цитаты исчезнут.

Как сказал мне Никарус, возможно, вы вообще не хотите обрезать строковые литералы, хотя я подумал, что это то, что вы хотели.

В этом случае это будет просто:

tableNameSpaces = [item [0] for item in cursor]
Другие вопросы по тегам