我有一個表,我想迭代並根據外鍵列找到特定的行,然後將其刪除。迭代特定列的表列表
這是我的表的名單看起來像:
subrep_tables = [ TCableResistance.__table__,
TCapacitorBankTest.__table__,
TCapAndDf.__table__,
TMeasuredData.__table__,
TMultiDeviceData.__table__,
TStepVoltage.__table__,
TTemperatureData.__table__,
TTransformerResistance.__table__,
TTransformerTurnsRatio.__table__,
TTripUnit.__table__,
TVectorDiagram.__table__,
TWithstandTest.__table__,
]
我叫列表subrep_tables
因爲所有這些表中包含名爲ixSubReport
的外鍵。
我試圖做的是遍歷列表,找到所有具有一定sub report
行和刪除,而不是要每個表和運行查詢,將其刪除(非常乏味)
的行這是我迄今爲止提出的。
for report in DBSession.query(TReport).filter(TReport.ixDevice == device_id).all():
for sub_report in DBSession.query(TSubReport).filter(TSubReport.ixReport == report.ixReport).all():
for table in subrep_tables:
for item in DBSession.query(table).filter(table.ixSubReport == sub_report.ixSubReport).all():
print "item: " + str(item)
#DBSession.delete(item)
我有一些困難訪問table
的ixSubReport
列我WHERE
條款。我現在的代碼給了我一個錯誤:'表'對象沒有'ixSubReport'屬性。
如何訪問我的迭代表的ixSubReport
列以在我的WHERE子句中使用以查找特定的行,以便我可以刪除它?
'table.c.ixSubReport' http://docs.sqlalchemy.org/en/rel_0_9/core/metadata.html#accessing-tables-and-columns – 2015-02-10 15:10:27
另外,您的模型和列名稱是不必要的冗長和令人困惑。不需要爲每個模型添加前綴「T」,每個索引列中都帶有「ix」等。爲什麼每個模型都會顯示其主鍵「ix <表名稱>」?這聽起來像一個外鍵的名稱(令人困惑的是,*是*,在相關模型上,更容易稱之爲「id」,您已經知道它是其中的一部分) – davidism 2015-02-10 16:42:23
我有'T'作爲前綴爲我的模型區分它作爲一個表,ix是我的'索引'的前綴,因此它更容易識別它作爲標識符,有助於消除回去並檢查我的字段是什麼數據類型,如果我忘記了 – john 2015-02-11 19:36:04