gpt4 book ai didi

python - web2py 中的复合键

转载 作者:行者123 更新时间:2023-11-28 19:45:27 24 4
gpt4 key购买 nike

我在 web2py 中定义了一个表

db.define_table(
'pairing',
Field('user',writable=True,readable=True),
Field('uid', writable=True , readable=True)
)

此表需要具有唯一的用户和 uid 组合。我查看了 web2py 文档,但没有直接的方法来定义复合键。我们如何在 web2py 中定义复合方式

最佳答案

这取决于你想做什么。默认情况下,web2py 会自动创建一个自动递增的 id 字段作为每个表的主键,这是尽可能推荐的方法。如果您正在处理具有复合主键的遗留数据库并且无法更改架构,则可以指定 primarykey 属性,但有一些限制(如 here 所述):

db.define_table('pairing', 
Field('user', writable=True, readable=True),
Field('uid', writable=True, readable=True),
primarykey=['user', 'uid'])

也许您实际上并不需要真正的复合主键,但您只需要某种方法来确保在表中只插入唯一的用户/uid 值对。在这种情况下,您可以通过为以下两个字段之一指定一个正确构造的 IS_NOT_IN_DB 验证器来做到这一点:

db.define_table('pairing',
Field('user', writable=True, readable=True),
Field('uid', writable=True, readable=True))

db.pairing.uid.requires=IS_NOT_IN_DB(db(db.pairing.user==request.vars.user),
'pairing.uid')

这将确保 uiduser 与插入的 user 的新值匹配的记录集中是唯一的(因此组合useruid 必须是唯一的)。请注意,验证器(例如 IS_NOT_IN_DB)仅在通过 SQLFORM 或使用 .validate_and_insert() 方法插入值时应用,因此上述方法不适用于任意插入到表中,但主要用于用户输入提交。

您还可以使用 SQL 在表上设置多列唯一约束(您可以直接在数据库中或通过 web2py .executesql() 方法)。但是,即使有这样的约束,您仍然希望在应用程序中进行一些输入验证以避免数据库出错。

关于python - web2py 中的复合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9683604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com