mysql - Django 中的 save() 函数会覆盖数据库表中的旧数据吗?
问题描述
我正在开发一个适用于两个数据库的 Django 应用程序,如下所示:
- Oracle DB(按小时获取数据)
- MySql DB(保存从 Oracle DB 获取的已处理数据)
我在 settings.py 中的数据库配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dashboard',
'USER': 'db1',
'PASSWORD': 'password1',
'HOST': 'localhost',
'PORT': '3306',
},
'MBDB': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'xe',
'USER': 'db2',
'PASSWORD': 'password2',
'HOST': 'localhost',
'PORT': '1521',
}
}
我的 Django 模型:
class Transactions(models.Model):
class Meta:
db_table='TRANSACTIONS'
unique_together=(("TIME_UPDATED","TRAN_TYPE"),)
indexes=[
models.Index(fields=["TIME_UPDATED","TRAN_TYPE"]),
models.Index(fields=["TRAN_TYPE"])
]
TIME_UPDATED = models.DateTimeField()
TRAN_TYPE = models.CharField(max_length=32,primary_key=True)
SUCCESS = models.IntegerField()
TECHNICAL_DECLINES = models.IntegerField()
BUSINESS_DECLINES = models.IntegerField()
TOTAL = models.IntegerField()
PERCENTAGE_TECH_DEC = models.FloatField()
def __str__(self):
return self.TRAN_TYPE
def save(self,D,tran):
self.TIME_UPDATED=D
self.TRAN_TYPE=T=tran['Type']
self.SUCCESS=S=int(tran['Success'])
self.TECHNICAL_DECLINES=TD=int(tran['Tech_dec'])
self.BUSINESS_DECLINES=BD=int(tran['Bus_dec'])
self.TOTAL=total=S+TD+BD
if total==0:#division by zero error constraint
self.PERCENTAGE_TECH_DEC=0
else:
self.PERCENTAGE_TECH_DEC=((TD/(total))*100)
super(Transactions,self).save()
Here the column ```TRAN_TYPE`` is defined as the primary key and both ```TRAN_TYPE``` AND ```TIME_UPDATED``` are composite primary keys as defined in ```Class Meta```.
来自views.py 的示例查询集:
{'SERVICE_CODE': 'IBKREVERSAL', 'Type': 'IBKREVERSAL', 'Success': 1, 'Tech_dec': 4, 'Bus_dec': 0}
查询集已处理并保存@Transactions 于 2021 年 10 月 14 日 - 17:25:20:
{'TIME_UPDATED': datetime.datetime(2021, 10, 14, 17, 25, 20, tzinfo=<UTC>), 'TRAN_TYPE': 'IBKREVERSAL', 'SUCCESS': 1, 'TECHNICAL_DECLINES': 4, 'BUSINESS_DECLINES': 0, 'TOTAL': 5, 'PERCENTAGE_TECH_DEC': Decimal('80.000')}
现在,当我尝试在不同的时间(例如 2021 年 10 月 14 日 - 17:27:00)处理和保存相同的查询集时,之前的数据将被覆盖,这在我试图保存时不应该发生记录形式的数据。
我该怎么办?