为什么在Django上使用bulk_create通过外键插入数据会返回“属性对象不可调用”?

路易斯·卡洛斯·马塞多(Luiz Carlos Macedo)

我将Django 2.17与SQLite 3.26数据库配合使用,并尝试从csv文件插入数据。我正在使用get_or_create方法,但是速度太慢。因此,我开始尝试使用bulk_create进行插入。

我使用了以下模型字段:

class SENSOR_TEMPERATURA(models.Model):
    ID_Sensor_Temperatura = models.AutoField(primary_key = True)

class VALOR_TEMPERATURA(models.Model):
    ID_Valor_Temperatura = models.AutoField(primary_key = True)
    ID_Sensor_Temperatura = models.ForeignKey(SENSOR_TEMPERATURA, on_delete = models.PROTECT, null = False, db_column = 'VATE_CD_ID_Sensor_Temperatura')
    Data_De_Medição = models.DateTimeField(default = datetime.now(), null = False)
    Valor = models.DecimalField(default = 0, null = False, max_digits = 30, decimal_places = 15)

我尝试运行的代码是:

     print (datetime.datetime.now())         
     reader = csv.reader(f) 
     insert_CSV = [] 
     count = 1 
     for row in reader: 
         insert_CSV.append([ 
         VALOR_TEMPERATURA.pk(ID_Valor_Temperatura = count), 
         VALOR_TEMPERATURA(Data_De_Medição = datetime.datetime.strptime(row[0] + " UTC-0300",'%d/%m/%Y %H:%M:%S %Z%z')), 
         VALOR_TEMPERATURA(Valor = float(row[1])), 
         VALOR_TEMPERATURA(ID_Sensor_Temperatura = SENSOR_TEMPERATURA.objects.get(ID_Sensor_Temperatura = 4)) 
         ]) 
         count = count + 1 
     print (datetime.datetime.now()) 
     VALOR_TEMPERATURA.objects.bulk_create(insert_CSV) 
     print (datetime.datetime.now()) 

我认为给我带来麻烦的部分是“ ID_Sensor_Temperatura = SENSOR_TEMPERATURA.objects.get(ID_Sensor_Temperatura = 4))”,但这正是我使用get_or_create时定义外键的方式,因此我无法弄清楚是什么问题。

我收到以下错误:

  6     for row in reader:
  7         insert_CSV.append([
  8         VALOR_TEMPERATURA.pk(VATE_CD_ID_Valor_Temperatura = count),
  9         VALOR_TEMPERATURA(VATE_DF_Data_De_Medição = datetime.datetime.strptime(row[0] + " UTC-0300",'%d/%m/%Y %H:%M:%S %Z%z')),
 10         VALOR_TEMPERATURA(VATE_VL_Valor = float(row[1])),

TypeError: 'property' object is not callable

可能是什么问题?

丹尼尔·罗斯曼

这不是您编写Python的方式。您需要创建对象的实例,并向其传递值。

insert_CSV.append( 
     VALOR_TEMPERATURA(
        ID_Valor_Temperatura=count, 
         Data_De_Medição=datetime.datetime.strptime(row[0] + " UTC-0300",'%d/%m/%Y %H:%M:%S %Z%z')), 
         Valor=float(row[1]), 
         ID_Sensor_Temperatura=SENSOR_TEMPERATURA.objects.get(ID_Sensor_Temperatura=4)
     )
)

还要注意,您的模型不应该在ALL_CAPS中定义,因为它们不是常量。它们应分别称为ValorTemperatura和SensorTemperatura。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django覆盖bulk_create

django-'NoneType'对象不可调用

Django`bulk_create`与相关对象

Django-'模块'对象不可调用

在Python中使用__getattr__方法腌制的对象会返回“ TypeError,对象不可调用”

我的代码行中的字符串格式有什么问题,为什么会这样说:TypeError:'NoneType'对象不可调用?

通过分组汇总数据时出现“无法创建对不可调用对象的调用”错误

如何从Django视图中为外键属性插入数据?

使用Django bulk_create()函数时,'dict'对象没有属性'pk'

Django的并发bulk_create没有将所有值插入数据库

Django TypeError元组对象不可调用?

TypeError:“ Player”对象不可调用Django

为什么我得到'str'对象不可调用?

Django:TypeError:“ ModelSignal”对象不可调用

Django测试对象不可调用

为什么“模块”对象在python opencv中不可调用?

为什么Python会说“'int'对象不可调用”?

如何处理Django对象的异常。bulk_create()

在bulk_create上插入由django ORM创建的语句

对象不可调用

为什么在对象和shared_ptrs上使用从std :: mem_fn返回的可调用对象?

Django - “Feed”对象不可调用

为什么“列表”对象不可调用”bu使用类

无法在 django 中将计算属性保存到数据模型中,抛出错误“int”对象不可调用

Django - 'bool' 对象不可调用

使用属性覆盖 setter:TypeError: 'int' 对象不可调用

为什么我收到错误“str”对象不可调用

Django CreateView:“str”对象不可调用

使用 django bulk_create() 返回 none 的对象实例