Как убрать символы из строки, которая вернулась из базы данных?

Строка возвращается в таком формате:

('text',)

Как это дело обрезать и оставить только text?


Ответы (3 шт):

Автор решения: Danis

вот так:

x = ('text', )
x = x[0]

если это строка, то так:

x = "('text',)"
x = x[2:-3]
→ Ссылка
Автор решения: Jack_oS

Используйте встроенный метод для строк str.replace(old, new[, count])

my_str = "('text',)"
plain_str = my_str.replace("('", "").replace("',)", "")

заменит ненужные подстроки на пустые, в результате:

>>> plain_str
text
→ Ссылка
Автор решения: MaxU

При чтении данных из БД с использованием методов cursor.fetchone(), cursor.fetchall() - вы всегда получаете кортежи с данными, в не зависимости от того сколько столбцов таблицы вы читаете - один или несколько.

Судя по тому, что вы получаете строку "('text',)" вместо кортежа ('text',), вы неправильно обрабатываете полученные из БД кортежи с данными. А именно применяете str() к полученному из БД кортежу данных:

Пример того, как делать не нужно:

cur.execute("SELECT text_col FROM table_name")
for row in cur.fetchall():
    text = str(row)  # <-- опасное и ненужное преобразование кортежа с данными в строку!
    print(text)

так делать не стоит сразу по нескольким причинам - вы превращаете кортеж с упорядоченными данными (с правильными типами данных) в строку, которую впоследствии придется парсить и, в случае когда столбец(цы) таблицы имеют нестроковой тип данных, еще и преобразовывать эти элементы обратно к правильным типам данных. Это ненужные операции, замедляющие код и делающие его менее понятным.

Лучше сделать так:

cur.execute("SELECT text_col FROM table_name")
for row in cur.fetchall():
    text = row[0]
    # дальше мы используем text
→ Ссылка