2014-02-17 24 views
0

早安, 我有一個數據庫有三個表:web2py的 - 在一個一對多的編程方式插入DB

db.define_table('person', 
      Field('name', length=100), 
      Field('dob', length=10), 
      Field('address', 'text', length=255), 
      Field('countryname', length=3), 
      Field('statename', length=100), 
      ) 

db.define_table('opslist', 
      Field('opid', length=10), 
      Field('dop', length=10), 
      Field('type_operation', length=25), 
      ) 

db.define_table('cardlist', 
      Field('opid', db.opslist), 
      Field('name', db.person), 
      Field('countryname', length=3, required=True), 
      Field('statename', length=100, required=True), 
      Field('zip', length=5, required=False), 
      ) 

我將通過代碼中插入,是指不使用SQLFORM或形式,一些數據進入... 例如:如果我有所有可插入cardlist表中的值,操作必須讓我能夠自動填充相關記錄(創建新的如果不存在)到其他表中。 這是因爲它是一個關係數據庫與外鍵...

這是可能的使用DAL的web2py?或者我必須寫我的原始sql命令?

謝謝大家

+0

你是說你有一個人,一個opslist和相關cardlist記錄中的數據,但你不不知道人員和opslist記錄是否存在(所以在插入cardlist記錄之前可能需要創建它們,也可能不需要創建)?假設您擁有人員和opslist數據,您如何知道他們可以用來識別每個表格中的一個唯一記錄(您的人員和opslist模型定義似乎沒有包含任何唯一性約束)?如果沒有唯一記錄的保證,就沒有辦法知道要在cardlist中的參考字段中輸入什麼ID。 – Anthony

+0

嗨安東尼,抱歉,但我相信我無法完美解釋。我會爲cardlist表添加新的信息:person(person表的名字),operation event(opslist表)和countryname,statename zip。在這種情況下,我可以把這個信息到數據庫?不使用sqlform或表單?例如使用:db.cardlist.insert(name = ,opid = ,countryname = ,state = ,zip = <12345>) – user3319321

回答

1

只需使用insert方法。它返回新創建的記錄,您可以使用插入到參考字段的ID:

person = db.person.insert(name=..., dob=..., ...) 
opslist = db.opslist.insert(opid=..., dop=..., ...) 
db.cardlist.insert(opid=opslist, name=person, ...) 
相關問題