社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

为什么在Django上使用bulk-create插入带外键的数据会返回“property object is not callable”?

Luiz Carlos Macedo • 5 年前 • 2591 次点击  

我将Django 2.17与SQLite 3.26数据库一起使用,并尝试从csv文件插入数据。我用的是get_或_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_temperaturea=Sensor_temperaturea.objects.get(ID_Sensor_temperaturea=4))”,但这正是我在使用get_或_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社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53302
 
2591 次点击  
文章 [ 1 ]  |  最新文章 5 年前