我正在使用由sqlalchemy第三方制作的现有数据库。然而,我遇到了麻烦,因为表没有主键,更糟的是,它们每行都有重复的元素,所以我不能选择现有的列作为主键。这些表格有两列:都具有非唯一值。Python sqlalchemy:没有主键和重复值的表?
我试图猴子补丁表按http://www.blog.pythonlibrary.org/2010/09/10/sqlalchemy-connecting-to-pre-existing-databases/但显然,这并不工作(见下文)
我当前的代码是(MirnaTable
是我的映射类,基本上就没有别的骨架)
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()
然后我尝试例如发行
all_records = session.query(MirnaTable).all()
我也得到
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'()
所以当然没有找到id列。关于我在做什么的任何想法都是错误的?提前致谢。
编辑:按照要求,这里是从表为例(直接从源码检索):
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
你能张贴表带有示例数据请? – JackalopeZero 2012-02-15 10:30:32
完成:您现在可以期待什么样的数据样本。 – Einar 2012-02-15 10:39:19
如果没有可用作行标识的内容,ORM将无法正常工作。考虑直接使用表而不将其映射到类。 – 2012-02-15 10:50:49