如何用SQLAlchemy定义没有主键的表?

2024-04-25 11:51:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个没有primary key的表。我真的不想对这个表应用这个约束。

SQLAlchemy中,我通过以下方式定义表类:

class SomeTable(Base):
  __table__ = Table('SomeTable', meta, autoload=True, autoload_with=engine)

当我试图查询这个表时,我得到:

ArgumentError: Mapper Mapper|SomeTable|SomeTable could not assemble any primary key columns for mapped table 'SomeTable'.

如何丢失每个表都必须有主键的约束?


Tags: keytruebase定义sqlalchemy方式tablemeta
2条回答

对此没有合适的解决方案,但有解决方法:

解决方案1

将参数primary_key添加到没有主键的现有列将起作用。

class SomeTable(Base):
    __table__ = 'some_table'
    some_other_already_existing_column = Column(..., primary_key=True) # just add primary key to it whether or not this column is having primary key or not

解决方案2

只需在ORM层声明一个新的虚拟列,而不是在实际的DB中。在SQLalchemy模型中定义

class SomeTable(Base):
    __table__ = 'some_table'
    column_not_exist_in_db = Column(Integer, primary_key=True) # just add for sake of this error, dont add in db

在SQL炼金术中,只有一种方法可以绕过主键约束,那就是将特定列映射到表中作为主键,即使它们本身不是主键。 http://docs.sqlalchemy.org/en/latest/faq/ormconfiguration.html#how-do-i-map-a-table-that-has-no-primary-key

相关问题 更多 >