[英]SQLAlchemy Automap does not create class for tables without primary key
[英]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.