使用Flask上的SQLAlchemy替换所有行的字符

时间:2014-07-25 20:00:15

标签: python flask sqlalchemy flask-sqlalchemy python-unicode

我犯了一个错误,就是在使用在Flask上运行的SQLAlchemy提交到数据库中的表单中意外使用了非ascii字符。基本上,我使用的是unicode en-dash ,而不是使用ASCII连字符。我现在试着回去用我的数据库中的连字符替换所有出现的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列中的连字符替换所有出现的en-dash,用于我的数据库中的所有行?

1 个答案:

答案 0 :(得分:0)

我能够通过在我的数据库中的所有条目上运行脚本并替换具有错误字符的脚本来解决此问题。

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()