不带主键的Python sqlalchemy映射表

不带主键的Python sqlalchemy映射表,python,orm,sqlalchemy,Python,Orm,Sqlalchemy,我有一个第三方数据库,我试图用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] .....

我有一个第三方数据库,我试图用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]' }

不起作用。如何绘制此地图?感谢您的帮助

找到了正确的语法:

class Channel(Base):

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

另一个解决办法是: 覆盖反射列(也可以在sqlalchemy doku中找到)

感谢您阅读以下内容:

primary_key–列对象列表,用于定义要针对此映射器的可选单元使用的主键。这通常只是本地_表的主键,但可以在此处重写

所以你可以这样做:

class MyTable(Base):
    __tablename__ = "my-table"

    field1 = Column(String(10))
    field2 = Column(String(10))

    __mapper_args__ = {
        "primary_key":[field1, field2]
    }

在试图弄清楚如何使用使用使用
创建表创建的sqlite数据库后,
\uuuu映射器\u args\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。。。AS SELECT*
语句,该语句必然不能有主键,也不能添加。
class MyTable(Base):
    __tablename__ = "my-table"

    field1 = Column(String(10))
    field2 = Column(String(10))

    __mapper_args__ = {
        "primary_key":[field1, field2]
    }