gpt4 book ai didi

mysql - Django queryset 选择在哪里连接

转载 作者:行者123 更新时间:2023-11-29 06:09:50 25 4
gpt4 key购买 nike

我有一个像这样的 sql 查询:

select *
from sys_user_promotion_record
where user_id=102 and concat(',' ,vendor_id, ',') like '%,1,%'

我怎样才能将该查询放入 Django 查询集中?到目前为止,我设法制作了这个 Django 查询集:

SysUserPromotionRecord.objects.filter(user_id=102, vendor_id__contains=','+'1'+',')

如何将 concat(',' ,vendor_id, ',') 制作成 Django 查询集?我避免在我的代码中使用原始 sql 查询。谢谢。

这是 vendor_id 值示例:

  • 1,11,14

  • 2,1,5

  • 3,5,11

执行sql时,会出现第1行和第2行。

最佳答案

您所做的应该有效,但我假设 vendor_id 是一个整数,因此没有任何逗号。如果这是真的,您的查询将始终返回一个空查询集。

如果你想查询 vendor_id IN (vendor_id1, vendor_id12, ...) 那么查询是 .filter(vendor_id__in=list_of_vendor_ids)

但如果您的供应商 ID 确实是一个字符串并且可以包含逗号,您的查询应该可以工作,但您也需要处理边缘情况,例如 '...,11'、'11' 和 '11,。 ..'。因此我建议这样的事情

from django.db.models import Q
vendor_query = Q(vendor_id__iregex=r'^{0},|,{0},|,{0}$|^{0}$'.format(vendor_id))
SysUserPromotionRecord.objects.filter(vendor_query, user_id=102)

编辑:看到您的更改,答案的第一部分似乎可以忽略。

编辑:将正则表达式更新为之前的 r',?{},?' 会在搜索 1 时返回 11 等情况下返回错误结果

关于mysql - Django queryset 选择在哪里连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38951071/

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