Django ORM 能否以与后端无关的可靠方式存储无符号 64 位整数(又名 ulong64 或 uint64)?

2024-04-21

我见过的所有文档都暗示你might能够做到这一点,但没有任何官方 w/r/t ulong64/uint64 字段。在这个领域有一些现成的选项看起来很有前途:

  • BigIntegerField...几乎,但签名;
  • PositiveIntegerField...看起来可疑的 32 位;和
  • DecimalField...用 python 表示的固定指针decimal类型,根据the docs https://docs.djangoproject.com/en/dev/ref/models/fields/#decimalfield——当它被隐藏起来时,它可能会变成一个类似迂腐且缓慢的数据库字段,就像 DECIMAL 或 NUMERIC PostgreSQL 类型一样。

...所有这些look像他们一样might存储这样的数字。除了他们都不会承诺,就像休·格兰特扮演的每一个浪漫喜剧角色一样。

我的主要标准是它可以与 Django 支持的后端一起使用,不需要任何if postgresql (...) elif mysql (...)特殊情况的废话类型。之后,需要速度 - 这是视觉数据库应用程序中的模型字段,它将索引图像派生数据(例如感知哈希和提取的关键点特征),允许按这些图像的内容进行排序和分组。

那么:是否有一个好的 Django 扩展或应用程序可以提供某种功能PositiveBigIntegerField这适合我的目的吗?

并且,除此之外:如果有一种简单可靠的方法来使用 Django 的普通 ORM 来存储无符号 64 位整数,我想知道它。看,我不是二进制高手;我必须在纸上进行补码——因此,如果您的这种方法涉及一些位移位技巧,请毫不犹豫地解释它是什么,即使它让您觉得很明显。提前致谢。


虽然我没有测试它,但你可能希望只是子类化BigIntegerField。原本的BigIntegerField看起来像那样(来源在这里 https://github.com/django/django/blob/ce3351b9508896afdf87d11bd64fd6b5ad928228/django/db/models/fields/__init__.py#L1831):

class BigIntegerField(IntegerField):
    empty_strings_allowed = False
    description = _("Big (8 byte) integer")
    MAX_BIGINT = 9223372036854775807

    def get_internal_type(self):
        return "BigIntegerField"

    def formfield(self, **kwargs):
        defaults = {'min_value': -BigIntegerField.MAX_BIGINT - 1,
                    'max_value': BigIntegerField.MAX_BIGINT}
        defaults.update(kwargs)
        return super(BigIntegerField, self).formfield(**defaults)

Derived PositiveBigIntegerField可能看起来像这样:

class PositiveBigIntegerField(BigIntegerField):
    empty_strings_allowed = False
    description = _("Big (8 byte) positive integer")

    def db_type(self, connection):
        """
        Returns MySQL-specific column data type. Make additional checks
        to support other backends.
        """
        return 'bigint UNSIGNED'

    def formfield(self, **kwargs):
        defaults = {'min_value': 0,
                    'max_value': BigIntegerField.MAX_BIGINT * 2 - 1}
        defaults.update(kwargs)
        return super(PositiveBigIntegerField, self).formfield(**defaults)

尽管您应该在使用之前对其进行彻底测试。如果你这样做了,请分享结果:)

EDIT:

我错过了一件事——内部数据库表示。这是基于返回的值get_internal_type()并且存储列类型的定义,例如。here https://github.com/django/django/blob/master/django/db/backends/mysql/creation.py#L20如果是 MySQL 后端并确定here https://github.com/django/django/blob/master/django/db/models/fields/__init__.py#L208。看起来像覆盖db_type()将使您能够控制字段在数据库中的表示方式。但是,您需要找到一种方法来返回 DBMS 特定的值db_type()通过检查connection争论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django ORM 能否以与后端无关的可靠方式存储无符号 64 位整数(又名 ulong64 或 uint64)? 的相关文章

随机推荐

  • 为什么我应该由 setTimeout 调度的函数调用立即执行? [复制]

    这个问题在这里已经有答案了 这是我的问题 我有这个功能来测试代理服务器 function crawl var oldstatus document getElementById status innerHTML document getEl
  • 如何统计字符串中大写字母、小写字母和数字的个数?

    我想用 C 编写一个程序 它从用户那里获取一个字符串 并输出大写字母 小写字母和数字的数量 例如对于输入 aKb12CD34 结果应为 2 个小写字母 3 个大写字母和 4 个数字 Try include
  • PHP Stream_socket_client 的最大套接字数

    我需要检查数百个 URL 并使用stream socket client为每个URL创建套接字 然后使用stream select来检索它们并评估它们的响应时间等 但是 在创建 237 个套接字之后 我无法再创建套接字 没有错误代码或消息表
  • ASP.NET MVC3 Razor 视图 - VS2010 中编辑速度极慢

    我有一个用 ASP NET MVC3 编写的相对较小的项目 工作一段时间后 Visual Studio 2010 在 Razor 视图中变得非常慢 其他文件类型工作正常 我所说的 慢 是指 每次击键大约需要 1 秒才能注册 击键是什么并不重
  • 远程服务器返回错误:(407) 需要代理身份验证

    当我调用网络服务时出现此错误 远程服务器返回错误 407 需要代理身份验证 我了解了总体思路 并且可以通过添加来使代码正常工作 myProxy Credentials NetworkCredential user password doma
  • Java中的paint()和repaint()

    我可能花了两个小时浏览和阅读这些方法和 Graphics 类 也许我很愚蠢 哈哈 但我只是不理解它们 它们是做什么用的 我知道他们应该重绘或更新屏幕上的组件 但我从来不明白为什么需要这样做 我对此很陌生 例如 如果我在屏幕上移动 JLabe
  • 锁定 HttpRuntime.Cache 以进行延迟加载

    我们有一个运行 NET 2 0 的网站 并开始使用 ASP Net HttpRuntime Cache 来存储频繁数据查找的结果 以减少数据库访问 Snippet lock locker if HttpRuntime Cache cache
  • 网站不会在移动设备上滚动[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个网站 http www skeletoncru com 不会在移动设备上滚动 我以前见过这个问题 但这似乎不是通常的嫌疑人 我没主意了
  • Sql语法:select without from子句作为select中的子查询(subselect)

    在编辑一些查询以添加没有值的列的替代项时 我不小心写了这样的内容 这是简单的版本 SELECT id SELECT name FROM t 令我惊讶的是 MySQL 没有抛出任何错误 而是完成了查询 给出了我预期的结果 name列值 我试图
  • 在 Odoo 10 的表单视图中向 One2Many 树添加多条记录

    我目前正在 Odoo 10 中创建一个小部件 它有一个按钮 用户可以单击此按钮 然后会出现一个对话框 允许用户选择多个记录并将它们添加到相应的 One2Many 字段 例如 我可以选择多个产品并将它们添加到新的销售订单中 相应的订单行将添加
  • 如何在rails中执行任意参数化SQL

    出于性能原因 我需要在 Rails 模型中编写一个新方法来执行一些任意 SQL UPDATE table SET col1 AND col2 WHERE id 我明白我可以使用ActiveRecord Base connection exe
  • 在 R 中撤消布局

    我最初创建了一个箱线图和直方图组合的图 为此我设置了 nf lt layout mat matrix c 1 2 2 1 byrow TRUE height c 1 3 par mar c 2 2 1 1 Draw box plot Dra
  • Jawbone UP API oAuth 和访问令牌

    我今天开始深入研究 Jawbone 的 UP API 整个身份验证过程中一切似乎都很顺利 问题是 一旦我取回访问令牌 它始终是相同的令牌 它在我的任何请求中都不起作用 并且我无法使用刷新令牌端点更改它 oAuth 设置 url params
  • 提高谷歌地图绘制长路径的性能

    这个问题和这个不一样另一个 https stackoverflow com questions 7503848 improving google maps performance因此 我观察到原生谷歌地图应用程序在地图上绘制很长的距离 当缩
  • PyQt QtWebKit loadFinished 未调用

    我有这个脚本 当它准备好时我想用它做更多的事情 from PyQt4 import QtCore QtGui QtWebKit class WebViewCreator def init self self view QtWebKit QW
  • 为什么 JavaScript 换行符在 HTML 中不起作用?

    我有以下内容 你们可能都知道 n不起作用 我必须使用 br 反而 如果我链接到外部 它也不起作用 js文件 这是我的问题 为什么不 n work 为什么 br 甚至工作 脚本标签内的所有内容难道不应该是严格的 JavaScript 而不是
  • openaigym env.P,AttributeError“TimeLimit”对象没有属性“P”

    我目前正在阅读 Sudharsan Ravichandiran 的 Python 强化学习实践 在我遇到的第一个示例中 遇到了以下 AttributeError AttributeError TimeLimit object has no
  • 将文本+图标组合成一个自动换行的小部件

    我正在尝试为我的应用程序创建一个帮助页面 我想简单地写 按 ICON 刷新分数 或在设置抽屉中启用自动刷新 其中 ICON 是 Icons refresh 如果屏幕不适合 则将整个内容自动换行 如果都是文本 我会简单地将其包装在灵活的小部件
  • 如何修复这个损坏文件的 PHP 下载脚本?

    我有一个强制下载脚本 可以在 PDF 和纯文本中产生良好的结果 并且在 ZIP 存档中半正常 它们在 Windows 中工作 而不是在 Linux 中工作 但是 应用程序文件和图像都失败 这些构成了我必须处理的绝大多数文件 正如我在此处看到
  • Django ORM 能否以与后端无关的可靠方式存储无符号 64 位整数(又名 ulong64 或 uint64)?

    我见过的所有文档都暗示你might能够做到这一点 但没有任何官方 w r t ulong64 uint64 字段 在这个领域有一些现成的选项看起来很有前途 BigIntegerField 几乎 但签名 PositiveIntegerFiel