首页 > 解决方案 > 没有主键的Python sqlalchemy映射表

问题描述

我有一个第 3 方数据库,我尝试使用 sqlalchemy 和 python 进行映射。数据库中的表不使用主键。而且我喜欢自己避免表定义,因为表有很多列。所以我写了下面的代码

在 sqlalchemy 的文档中找到以下映射器参数。

class MyTable(Base):
  __tablename__ = 'MyTable'
  __mapper_args__ = {'primary_key':[some_table_with_no_pk.c.uid, some_table_with_no_pk.c.bar]
.....
}

但对我来说,不清楚如何添加正确的命名,比如

{'primary_key':['MyTable', 'MyColumnInTable'] }
or
{'primary_key':'[MyTable, MyColumnInTable]' }

不起作用。我如何映射这个?谢谢你的帮助

标签: pythonormsqlalchemy

解决方案


找到正确的语法:

class Channel(Base):

   __tablename__ = 'MyTable'
   __table__ = Table(__tablename__, Base.metadata, autoload=True, autoload_with=Engine)   
   __mapper_args__ = {'primary_key': [__table__.c.MyColumnInTable]} 
... 
}

这对我有用。

另一种解决方案是:覆盖反射列(也可以在 sqlalchemy doku 中找到)

Column('MyColumnInTable', Integer, primary_key=True),   # override reflected 'id' to have primary key

谢谢


推荐阅读