如何将下面的 SQL 状态转换为 Django ORM
How to convert SQL states below to Django ORM
很难将下面的 SQL 语句转换为 Django ORM。非常感谢任何帮助。
SELECT a.state,
a.city,
a.postcode,
b.rate_authority,
b.rate,
b.rate_descr
FROM fileload_taxratemodel AS a
INNER JOIN fileload_taxrateresponsemodel AS b
ON b.jurs_id_id = a.id
ORDER BY state ASC
Django 模型:
正在尝试根据外键从两个模型中提取字段。
class TaxRateModel(models.Model):
company_code = models.CharField(max_length = 10)
document_date = models.DateTimeField()
country = models.CharField(max_length = 30, default = "US")
province = models.CharField(max_length = 100, null= True,blank= True)
state = models.CharField(max_length = 100)
county = models.CharField(max_length = 100,blank=True, null=True)
city = models.CharField(max_length = 100,blank=True, null=True)
district = models.CharField(max_length = 100, blank=True, null=True)
postcode = models.CharField(max_length = 5, blank=True, null=True)
rate_code = models.CharField(max_length = 30,default = "ST")
Django 第二模型:
class TaxRateResponseModel(models.Model):
jurs_id = models.ForeignKey(TaxRateModel,on_delete=models.CASCADE,related_name='rates')
rate_authority = models.CharField(max_length = 100, blank=True, null=True, default='')
rate_descr = models.CharField(max_length = 100, blank=True, null=True, default ='')
rate = models.DecimalField(max_digits= 10, decimal_places=5)
假设您在名为 horaire
:
的 django 应用程序中拥有这些模型
class A(models.Model):
city = models.CharField(max_length=200, null=True, blank=True)
postcode = models.CharField(max_length=200, null=True, blank=True)
state = models.CharField(max_length=200, null=True, blank=True)
class B(models.Model):
jurs_id = models.ForeignKey(A, related_name="ab", on_delete=models.DO_NOTHING)
rate_authority = models.CharField(max_length=200, null=True)
rate = models.CharField(max_length=200, null=True)
rate_descr = models.CharField(max_length=200, null=True)
在你的 django 中 shell 你可以这样做:
$> from horaire.models import B
$> items = B.objects.values(
'jurs_id__city',
'jurs_id__state',
'jurs_id__postcode',
'rate_authority',
'rate',
'rate_descr'
).order_by('jurs_id__state')
$> print(items.query)
SELECT
"horaire_a"."city",
"horaire_a"."state",
"horaire_a"."postcode",
"horaire_b"."rate_authority",
"horaire_b"."rate",
"horaire_b"."rate_descr"
FROM "horaire_b"
INNER JOIN "horaire_a" ON ("horaire_b"."jurs_id_id" = "horaire_a"."id")
ORDER BY "horaire_a"."state" ASC
或者,您可以这样做:
$> from horaire.models import A
$> items = A.objects.values(
'city',
'postcode',
'state',
'ab__rate_authority',
'ab__rate',
'ab__rate_descr'
).order_by('state')
$> print(items.query)
SELECT
"horaire_a"."city",
"horaire_a"."postcode",
"horaire_a"."state",
"horaire_b"."rate_authority",
"horaire_b"."rate",
"horaire_b"."rate_descr"
FROM "horaire_a"
LEFT OUTER JOIN "horaire_b" ON ("horaire_a"."id" = "horaire_b"."jurs_id_id")
ORDER BY "horaire_a"."state" ASC
然而,如您所见,在最终的 SQL 查询中没有任何 ALIAS
,而且我没有找到使用 DJANGO ORM
实现它的相关方法(请参阅这个answer for more details)。
除此之外,您始终可以传递 Raw SQL
,当然您也可以编写自定义 SQL 查询,稍后您可以在您的应用程序下使用数据。
有关 Raw SQL in Django
的更多信息,请访问此 documentation link
很难将下面的 SQL 语句转换为 Django ORM。非常感谢任何帮助。
SELECT a.state,
a.city,
a.postcode,
b.rate_authority,
b.rate,
b.rate_descr
FROM fileload_taxratemodel AS a
INNER JOIN fileload_taxrateresponsemodel AS b
ON b.jurs_id_id = a.id
ORDER BY state ASC
Django 模型:
正在尝试根据外键从两个模型中提取字段。
class TaxRateModel(models.Model):
company_code = models.CharField(max_length = 10)
document_date = models.DateTimeField()
country = models.CharField(max_length = 30, default = "US")
province = models.CharField(max_length = 100, null= True,blank= True)
state = models.CharField(max_length = 100)
county = models.CharField(max_length = 100,blank=True, null=True)
city = models.CharField(max_length = 100,blank=True, null=True)
district = models.CharField(max_length = 100, blank=True, null=True)
postcode = models.CharField(max_length = 5, blank=True, null=True)
rate_code = models.CharField(max_length = 30,default = "ST")
Django 第二模型:
class TaxRateResponseModel(models.Model):
jurs_id = models.ForeignKey(TaxRateModel,on_delete=models.CASCADE,related_name='rates')
rate_authority = models.CharField(max_length = 100, blank=True, null=True, default='')
rate_descr = models.CharField(max_length = 100, blank=True, null=True, default ='')
rate = models.DecimalField(max_digits= 10, decimal_places=5)
假设您在名为 horaire
:
class A(models.Model):
city = models.CharField(max_length=200, null=True, blank=True)
postcode = models.CharField(max_length=200, null=True, blank=True)
state = models.CharField(max_length=200, null=True, blank=True)
class B(models.Model):
jurs_id = models.ForeignKey(A, related_name="ab", on_delete=models.DO_NOTHING)
rate_authority = models.CharField(max_length=200, null=True)
rate = models.CharField(max_length=200, null=True)
rate_descr = models.CharField(max_length=200, null=True)
在你的 django 中 shell 你可以这样做:
$> from horaire.models import B
$> items = B.objects.values(
'jurs_id__city',
'jurs_id__state',
'jurs_id__postcode',
'rate_authority',
'rate',
'rate_descr'
).order_by('jurs_id__state')
$> print(items.query)
SELECT
"horaire_a"."city",
"horaire_a"."state",
"horaire_a"."postcode",
"horaire_b"."rate_authority",
"horaire_b"."rate",
"horaire_b"."rate_descr"
FROM "horaire_b"
INNER JOIN "horaire_a" ON ("horaire_b"."jurs_id_id" = "horaire_a"."id")
ORDER BY "horaire_a"."state" ASC
或者,您可以这样做:
$> from horaire.models import A
$> items = A.objects.values(
'city',
'postcode',
'state',
'ab__rate_authority',
'ab__rate',
'ab__rate_descr'
).order_by('state')
$> print(items.query)
SELECT
"horaire_a"."city",
"horaire_a"."postcode",
"horaire_a"."state",
"horaire_b"."rate_authority",
"horaire_b"."rate",
"horaire_b"."rate_descr"
FROM "horaire_a"
LEFT OUTER JOIN "horaire_b" ON ("horaire_a"."id" = "horaire_b"."jurs_id_id")
ORDER BY "horaire_a"."state" ASC
然而,如您所见,在最终的 SQL 查询中没有任何 ALIAS
,而且我没有找到使用 DJANGO ORM
实现它的相关方法(请参阅这个answer for more details)。
除此之外,您始终可以传递 Raw SQL
,当然您也可以编写自定义 SQL 查询,稍后您可以在您的应用程序下使用数据。
有关 Raw SQL in Django
的更多信息,请访问此 documentation link