django - 使用 django 的 PostgreSQL IP inet 比较
问题描述
在我的 PostgreSQL 数据库中,我有一个网络设备表。
我正在构建一个必须与该表交互的 django 应用程序。我正在使用带有 .get() 和 .filter() 方法的模型,但我不确定如何处理以下查询:
select * from my_table where ip << inet '10.93.1/24'
这应该得到类似的记录10.93.1.*
,但不是10.93.13.*
,所以我不能只使用:
items = MyTable.objects.filter(ip__startswith='10.93.1')
此查询的 django 等效项是什么?
解决方案
我找到了一个简单的解决方案:filter
我正在使用另一种QuerySet
方法而不是extra
.
所以,这是我现在的代码:
objList = MyTable.objects.extra(where=["ip << inet '{}'".format(ip)])
注意:方法的where
参数extra
需要一个列表。然后它将列表中的每个元素视为一个条件,并将它们与AND
. 所以,只传递一个字符串:
objList = MyTable.objects.extra(where="ip << inet '{}'".format(ip))
将导致extra
将此字符串视为字符列表,这将导致查询:
...WHERE (i) AND (p) AND ( ) AND (<) AND (<) AND ( ) AND (i) AND (n) AND (e) AND (t) AND ( ) AND (') AND (1) AND (0) AND (.) AND (9) AND (3) AND (.) AND (1) AND (/) AND (2) AND (4) AND (')
推荐阅读
- java - 使用 sh 脚本从 JAVA_OPTIONS 中删除选项
- javascript - Bootstrap 错误信息 Error: Bootstrap 的 JavaScript 需要 jQuery
- css - React本机iOS中的垂直居中自定义字体
- php - WordPress页面重定向到404?
- ruby-on-rails - 从单独的进程调用 sidekiq 工作人员
- python - 按键对字典进行排序,其中键是字符串和数字的混合,然后用排序后的 key_values 制作一个新字典
- typescript2.0 - 无法执行打字稿功能
- c# - 为查询类型 Ef core 2.1 初始化数据
- stenciljs - 模板父组件变量更改不刷新子组件
- symfony - 如何使用 YAML 映射实现“alsoLoad”(Symfony)