【问题标题】:query in postgresql convert to Django ormpostgresql 中的查询转换为 Django orm
【发布时间】:2021-10-16 16:44:03
【问题描述】:

我想将 postgresql 代码转换为 Django ORM 查询。

说明: 模板 = ['Guidelines', 'Widget_Details', 'Mapping_Template', 'Data_Upload'] 当我上传 excel 文件时,它会验证功能并在应用程序中更新

Postgres 查询:

sqltcket = "select ticket_limit from "+dbNameQry+".dboard_computed_system_user_setting"
    print('asdfghjqwertyuioplkmnbvcdfhjknbv',sqltcket)
    sqltcket = sqltcket +" where user_id='"+user_id+"' and business_unit='"+bu+"'"

我尝试过转换 Django ORM: 验证excel.py:

sqltcket = DboardComputedSystemUserSetting.objects.filter(user_id = user_id, business_unit = bu).values_list('ticket_limit', flat = True)

models.py:

class DboardComputedSystemUserSetting(models.Model):
    setting_id = models.AutoField(primary_key=True)
    user_id = models.TextField(blank=True, null=True)
    email_id = models.TextField(blank=True, null=True)
    bu_registration_time = models.DateTimeField(blank=True, null=True)
    is_admin = models.IntegerField(blank=True, null=True)
    business_unit = models.TextField(blank=True, null=True)
    buexpiry = models.TextField(blank=True, null=True)
    ticket_limit = models.IntegerField(blank=True, null=True)
    class Meta:
        managed = True
        db_table = 'dboard_computed_system_user_setting'
        unique_together = (('setting_id', 'setting_id'))

错误: 无效的文字或 base10:queryDB 中的异常:参数 1 必须是字符串或 unicode 对象:queryset 代替

请任何人都可以帮助我解决这些问题。

【问题讨论】:

  • 看起来你使用sqltcket作为查询,但是你构建了一个查询集,这意味着如果你枚举sqltcket例如,它将进行查询并显示结果,它不会生成字符串来进行查询。
  • sqlticket 长什么样子?
  • 你好威廉。我已经把 sqltcket 是一个变量。
  • 其实,在我的项目中并没有使用 ORM 的 .所以他们编写原始查询,我想将原始查询写入 ORM。

标签: python postgresql django-rest-framework pgadmin


【解决方案1】:
sqltcket = DboardComputedSystemUserSetting.objects.filter(user_id = user_id, business_unit = bu).values_list('ticket_limit', flat = True)

看起来你的 user_id 变量是一个查询集而不是一个字符串

我在想象你使用过滤器来获得user_id 的赞

user_id = Users.objects.filter(id=random_variable)

这会返回一个查询集,它可以有 0,1 个或多个用户,而不是一个字符串。

如果 user_id 确实是我假设的查询集。 如果您想按单个用户进行过滤,并且您确定变量 user_id 有一个用户,您可以使用以下内容

DboardComputedSystemUserSetting.objects.filter(user_id = user_id.first().id, ... )...

如果出于某种原因您希望由多个用户进行过滤,您可以使用

DboardComputedSystemUserSetting.objects.filter(user_id__in = user_id.values('id')... )...

您可以在 Django 中运行原始查询,但我不确定它是否可取 https://docs.djangoproject.com/en/3.2/topics/db/sql/#performing-raw-queries

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 2016-06-04
    • 2016-04-20
    • 2020-09-12
    • 1970-01-01
    • 2017-09-10
    • 2018-07-19
    • 2019-10-17
    相关资源
    最近更新 更多