Python 如何将下面的SQL状态转换为Django ORM
很难将下面的SQL语句转换为Django ORM。非常感谢您的帮助Python 如何将下面的SQL状态转换为Django ORM,python,sql,django,django-orm,Python,Sql,Django,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
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第2款:
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
或者,您可以执行以下操作:
$> 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查询中没有任何别名
,我也没有找到使用DJANGO ORM
实现它的相对方法(请参见此)。
除此之外,您还可以传递原始SQL
,当然,您可以编写自定义SQL查询,然后使用应用程序下的数据。
有关Django中原始SQL的更多信息,请访问此你能添加你的Django模型吗?真棒@chiheb,这正是我想要的-非常感谢!!