2011-04-20 14 views
10

Tengo un modelo SQLAlchemy con una columna Unicode. A veces le inserto valores unicode (u'Value '), pero también a veces inserto cadenas ASCII. ¿Cuál es la mejor manera de hacerlo? Cuando inserto cadenas ASCII con caracteres especiales aparece esta advertencia:Forma correcta de insertar cadenas en una columna Unicode de SQLAlchemy

SAWarning: Unicode type received non-unicode bind param value ... 

¿Cómo puedo evitar esto? ¿Cuál es la forma correcta de insertar mis diferentes tipos de cadenas?

Respuesta

5

Thre varias opciones:

  1. Desactivar todas las advertencias SQLAlchemy con warnings.simplefilter('ignore', sqlalchemy.exc.SAWarning).
  2. Deshabilite solo esta advertencia con especificación de filtro más específica por módulo y lineno o mensaje, p. Ej. warnings.filterwarnings('ignore', '^Unicode type received non-unicode bind param value', sqlalchemy.exc.SAWarning).
  3. Use String(convert_unicode=True) en lugar del tipo Unicode.
  4. Vuelva a pensar el problema y cambie su código para usar unicode incluso para cadenas ASCII.
+3

Usted attemping problema de eliminación en lugar de resolver el número it.About 3: La documentación oficial de 'sqlalchemy' dice usar' tipo Unicode' pero dices usar 'String (convert_unicode = True)', tengo el mismo problema, pero no creo que sqlalchemy resuelva con 'disable warning' porque tiene' clean código' no 'sucio'. – PersianGulf

0

Debe definir la clase mesa y constructor como tal:

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

Por supuesto, no hay que olvidar adjuntar URI+"charset=utf8" para create_engine function

Cuestiones relacionadas