Замените символ для всех строк, используя SQLAlchemy на Flask

Я совершил ошибку, случайно использовав не-ascii-символы в форме, которая была отправлена ​​в базу данных с помощью SQLAlchemy, работающего на Flask. По сути, вместо дефиса ASCII я использовал кодировку Unicode en-dash . Теперь я пытаюсь вернуться и заменить все вхождения en-dash дефисом в моей базе данных.

Допустим, у меня есть таблица пользователей, и столбец, который я пытаюсь изменить, называется occupation. Я могу выяснить, какие записи в моей базе данных имеют недопустимый символ, потому что когда я запускаю:

User.query.get(id)

если пользователь имеет недопустимый символ ASCII, он возвращает

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 167: ordinal not in range(128)

Итак, как я могу заменить все вхождения дефиса дефисом в столбце occupation для всех строк в моей БД?


person Jason Brooks    schedule 25.07.2014    source источник
comment
Вы пытались сделать что-то подобное для выполнения запросов? stackoverflow.com/questions/10819192/   -  person pgorsira    schedule 26.07.2014
comment
Затем вы можете просто заменить тире в каждой записи и сохранить изменение.   -  person pgorsira    schedule 26.07.2014


Ответы (1)


Я смог исправить это, запустив скрипт по всем записям в моей базе данных и заменив те, которые содержали ошибочные символы.

from user.models import *
for u in User.query.all():
    # \u2013 is unicode for en-dash
    if u"\u2013" in u.occupation:
        # replace with normal hyphen
        u.occupation = u.occupation.replace(u"\u2013", "-")
        db.session.commit()
person Jason Brooks    schedule 25.07.2014