Estoy usando una base de datos existente hecha por un tercero con sqlalchemy. Sin embargo, tengo problemas ya que las tablas no tienen claves primarias, y lo que es peor, tienen elementos duplicados para cada fila, por lo que no puedo elegir una columna existente como clave principal. Las tablas tienen dos columnas: ambas tienen valores no únicos.Python sqlalchemy: tabla sin claves principales y valores duplicados?
Traté de mono-parche de la mesa según http://www.blog.pythonlibrary.org/2010/09/10/sqlalchemy-connecting-to-pre-existing-databases/ pero al parecer esto no funciona (ver más abajo)
Mi código actual es (MirnaTable
es mi clase asignada, básicamente, sólo un esqueleto con nada más)
connection = create_engine("sqlite:///targets.sqlite")
metadata = MetaData(bind=connection)
db_table = Table("miranda", metadata,
Column("id", Integer, primary_key=True),
autoload=True)
mapper(MirnaTable, db_table)
Session = sessionmaker(connection)
session = Session()
Entonces trato, por ejemplo, la emisión de
all_records = session.query(MirnaTable).all()
Y consigo
sqlalchemy.exc.OperationalError: (OperationalError) no such column: miranda.id
u'SELECT miranda.gene_id AS miranda_gene_id, miranda."mature_miRNA" AS
"miranda_mature_miRNA", miranda.id AS miranda_id \nFROM miranda'()
Así que, por supuesto, no se encuentra la columna de id. ¿Alguna idea sobre lo que estoy haciendo mal? Gracias por adelantado.
EDIT: Conforme a lo solicitado, aquí es un ejemplo de la tabla (recuperados directamente de sqlite):
gene mature_miRNA
---- -------------
80205 hsa-miR-200c
80205 hsa-miR-200c
9693 hsa-miR-200c
9693 hsa-miR-200c
9881 hsa-miR-200c
9710 hsa-miR-200c
9750 hsa-miR-200c
Podría publicar la tabla con datos de ejemplo favor ? – JackalopeZero
Hecho: hay una muestra del tipo de datos que puede esperar ahora. – Einar
ORM no funcionará sin algo que pueda servir como una identidad de fila. Considere usar la tabla directamente sin asignarla a la clase. –