如果没有明确指定,默认情况下id是作为主键创建的字段的名称。
而pk独立于实际主键。 即您不必关心主键字段是被称为id还是user_id或其他什么,使用pk,可以提高代码的一致性。
当一张表具有不同主键字段的模型时,id更有用。
实际上大部分表使用id和pk 并没有什么区别,但建议使用pk。
id与pk速度如何?
%timeit obj.id 46 ns ± 0.187 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) %timeit obj.pk 347 ns ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
经过测试发现,使用id的确是比pk快,这是因为meta在查找pk属性需要花的事件。不过请注意该单位是纳秒。
pk在django的相关代码
def _get_pk_val(self, meta=None): meta = meta or self._meta return getattr(self, meta.pk.attname) def _set_pk_val(self, value): return setattr(self, self._meta.pk.attname, value) pk = property(_get_pk_val, _set_pk_val)
在网络请求中,使用pk会消耗三分之一微秒时间,可以忽略不计。
结论:
使用id和pk没有什么区别,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。