Codificación de caracteres en SQLAlchemy
Chema Cortes
pych3m4 en gmail.com
Jue Ago 14 11:11:44 CEST 2008
Estoy empezando con SQLAlchemy, así que puede que mi problema sea algo tonto...
Pretendo pasar una tabla de una base de datos MsAccess a Postgresql,
adaptando el MetaData de un motor al otro. Como la tabla original
utiliza la codificación cp1252 en los nombres de tablas y campos, se
lo indico en el parámetro "encoding"; la base de datos destino tiene
codificación "utf8":
#-*- encoding: utf8 -*-
db_access=create_engine("access:///j:/work/deu/crc.mdb",encoding="cp1252")
m1=MetaData(db_access)
db_pg=create_engine("postgres://chema:pw@skynet:5432/chema",encoding="utf-8")
m2=MetaData(db_pg)
t1=Table(u"Conexión",m1, autoload=True)
t2=t1.tometadata(m2)
t2.drop(checkfirst=True)
t2.create()
El primer metadata, m1, funciona correctamente, pero al adaptarlo al
segundo parece como si "recodificara" dos veces a utf8. Veo mal los
nombres de tabla y campos, "Conexión" en lugar de "Conexión".
print type(t1.description),t1.description --> <type 'str'> Conexi\xf3n
print type(t2.description),t2.description --> <type 'str'> Conexi\xf3n
Los dos metadatas están codificados en cp1252 como strings. Si el
segundo motor pongo encoding="cp1252" entonces me pone los nombres
bien.
Preguntas:
1) ¿Por qué no se adapta el metadata origen según la codificación del
metadata destino?
2) ¿No sería mejor que todos los metadatas estuvieran codificados en
unicode o, al menos, que hubiera alguna opción para indicar su
codificación como se hace al crear el motor?
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es