Python SQL 炼金术 : table with no primary keys and duplicate values?

标签 python sqlalchemy

我正在使用第三方使用 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 列。关于我做错了什么的任何想法?提前致谢。

编辑:根据要求,这里是表中的示例(直接从 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 

最佳答案

您误解了您所指的帖子。您必须选择一个现有 列并将其定义为主要列。也可以通过将它们全部放在定义中来设置复合主键。在你的情况下,我认为一个基因有几个成熟的 microRNA,所以主键可能应该由 (gene_id, mature_miRNA) 对组成。由于表中没有更多字段,因此不需要 autoload=True 标志。

db_table = Table("miranda", metadata,
                 Column("gene_id", Integer, primary_key=True),
                 Column("mature_miRNA", Integer, primary_key=True))

我不知道你表中的字段类型,所以如果不是整数,请适当更改。

关于Python SQL 炼金术 : table with no primary keys and duplicate values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9291307/

相关文章:

python - SQLAlchemy 核心连接上下文管理器

python - 在 Jython/Python 中复制图片时,如何每行少复制 X 像素

python - pip install --upgrade sqlalchemy 超出最大递归深度

mysql - 使用 SQLAlchemy 创建表后,如何向其中添加其他列?

python - 将嵌套 JSON 解析为一个数据文件

python - 在 MySQL 数据库中存储和查询大量变长列表的最佳方法是什么?

python - 将 SQLAlchemy 继承关系重新映射到不同的 postgres 模式

Python:Pandas 使用 .describe() 版本大于 0.20 的切片

python - 是否可以获得 Dash-Cytoscape 图形工具提示?

python - Python 类型提示语法如何/为什么起作用?