簡體   English   中英

沒有主鍵的Python sqlalchemy映射表

[英]Python sqlalchemy mapping tables without primary key

我有一個 3rd 方數據庫,我嘗試用 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 中找到)

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

謝謝

正如你可以在這里閱讀:

primary_key – Column 對象的列表,這些對象定義要針對此映射器的可選單元使用的主鍵。 這通常只是 local_table 的主鍵,但可以在此處覆蓋。

所以你可以這樣做:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM