You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取CSV逐行POST至Django REST API仅上传最后一行问题

解决CSV数据仅最后一行上传至Django REST API的问题

你的核心问题是POST请求代码放在了for循环外部:当循环遍历完所有行后,row变量只会保留最后一行的数据,自然只有这一行被上传。

同时原代码里的状态码判断逻辑存在错误:response.status_code == 200 or 201会被Python解析为(response.status_code ==200) or 201,由于201是布尔真值,不管实际状态码是什么,都会执行"Data inserted successfully"的输出,需要修正为判断状态码是否在成功范围内。

修改后的代码如下:

import requests
import os
import csv

def insert_data_to_api():
    # CSV file path
    csv_folder = "csv"
    csv_file_name = "my_data.csv"
    csv_file_path = os.path.join(csv_folder, csv_file_name)
    url = "http://127.0.0.1:8000/api/url/"

    with open(csv_file_path, newline='') as file:
        # create a CSV reader object using DictReader
        reader = csv.DictReader(file)

        print("")
        print("==== UPLOADING ROWS =====")
        print("")

        # iterate over each row in the CSV file
        for row in reader:
            print(f"Uploading row: {row}")
            # 将POST请求移到循环内部,每一行数据单独发送
            response = requests.post(url, json=row)
            
            # 修正状态码判断逻辑
            if response.status_code in (200, 201):
                print(f"Row uploaded successfully")
            else:
                print(f"Failed to upload row: {response.status_code}, Response: {response.text}")

insert_data_to_api()

额外优化建议

  • 如果CSV数据量很大,频繁的POST请求会影响效率,可以考虑修改Django API支持批量上传,将多行数据打包成一个请求发送,减少HTTP请求次数。
  • 可以添加异常捕获逻辑,处理网络请求失败的情况(比如连接超时、API不可达等)。

内容的提问来源于stack exchange,提问作者UDOT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:05:04