【问题标题】:web2py - programmatically insert on one-to-many dbweb2py - 以编程方式插入一对多数据库
【发布时间】:2014-03-16 20:18:15
【问题描述】:

早安, 我有一个包含三个表的数据库:

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 命令?

谢谢大家

【问题讨论】:

  • 你是说你有一个人、一个 opslist 和一个相关的 cardlist 记录的数据,但你不知道这个人和 opslist 记录是否存在(所以他们可能有也可能没有在插入卡片列表记录之前创建)?假设您有 person 和 opslist 数据,您怎么知道它们可用于识别每个表中的单个唯一记录(您的 person 和 opslist 模型定义似乎不包含任何唯一性约束)?如果没有唯一记录的保证,就无法知道在 cardlist 的参考字段中输入什么 ID。
  • 嗨安东尼,对不起,但我相信我无法完美解释。我会输入新信息:人员(人员表的名称等),操作事件(opslist 表)和国家/地区名称,卡列表表的州名 zip。在这种情况下,我可以将这些信息放入数据库中吗?不使用 sqlform 或表单?例如使用:db.cardlist.insert(name = , opid = , countryname = , state = , zip = )

标签: sql database data-access-layer web2py relational


【解决方案1】:

只需使用insert 方法。它返回新创建记录的 ID,您可以使用它来插入参考字段:

person = db.person.insert(name=..., dob=..., ...)
opslist = db.opslist.insert(opid=..., dop=..., ...)
db.cardlist.insert(opid=opslist, name=person, ...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2018-11-27
    • 1970-01-01
    • 2010-09-14
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多