Reputation: 191
I have a SQLAlchemy model with a Unicode column. I sometimes insert unicode values to it (u'Value'), but also sometimes insert ASCII strings. What is the best way to go about this? When I insert ASCII strings with special characters I get this warning:
SAWarning: Unicode type received non-unicode bind param value ...
How do I avoid this? What is the proper way to insert my different types of strings?
Upvotes: 14
Views: 8092
Reputation: 2935
You should define your table class and constructor as such:
class User(declarative_base()):
_tablename__ = 'user'
name = Column(Unicode(200, convert_unicode=False))
textfield = Column(UnicodeText(convert_unicode=False))
user = Table('user', MetaData(),
Column('name', Unicode(200, convert_unicode=False), nullable=False),
Column('textfield', UnicodeText(convert_unicode=False), nullable=False),
)
Of course, you should not forget to attach URI+"charset=utf8"
for create_engine function
Upvotes: 0
Reputation: 33200
Thre are several options:
warnings.simplefilter('ignore', sqlalchemy.exc.SAWarning)
.warnings.filterwarnings('ignore', '^Unicode type received non-unicode bind param value', sqlalchemy.exc.SAWarning)
.String(convert_unicode=True)
instead of Unicode
type.Upvotes: 5