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

如何在Django中获取指定文件夹内的所有文件并存储至数据库

当然可以实现!不过Django默认不会自动把media文件夹里已有的文件同步到Documents数据表中,你得自己写点小代码来批量导入——下面两种方法都能搞定:

方法一:用Django Shell手动导入

这种方法适合临时执行一次导入操作:

  1. 先进入项目的虚拟环境(如果用了的话),然后运行命令进入Django Shell:
python manage.py shell
  1. 在Shell里依次执行以下代码(记得替换your_app为你实际的app名称):
import os
from django.conf import settings
from your_app.models import Documents

# 遍历media文件夹下的所有PDF文件
media_folder = settings.MEDIA_ROOT
pdf_files = [f for f in os.listdir(media_folder) if f.lower().endswith('.pdf')]

# 批量导入到数据库
for filename in pdf_files:
    file_full_path = os.path.join(media_folder, filename)
    # 先检查文件是否已存在,避免重复导入
    if not Documents.objects.filter(file=filename).exists():
        with open(file_full_path, 'rb') as file_obj:
            doc = Documents(file=file_obj)
            doc.save()
            print(f"成功导入: {filename}")
方法二:编写独立脚本批量导入

如果需要重复执行导入操作,写个独立脚本会更方便:

  1. 在项目根目录新建一个脚本文件(比如import_pdfs.py),内容如下(替换your_project和your_app为实际名称):
import os
import django
import sys

# 初始化Django环境
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
django.setup()

from your_app.models import Documents
from django.conf import settings

def batch_import_pdfs():
    media_folder = settings.MEDIA_ROOT
    # 遍历所有PDF文件(如果有子文件夹,可以改成递归遍历)
    pdf_files = [
        f for f in os.listdir(media_folder)
        if os.path.isfile(os.path.join(media_folder, f)) and f.lower().endswith('.pdf')
    ]
    
    for filename in pdf_files:
        if not Documents.objects.filter(file=filename).exists():
            file_path = os.path.join(media_folder, filename)
            with open(file_path, 'rb') as file_obj:
                Documents.objects.create(file=file_obj)
            print(f"已导入文件: {filename}")
    print("所有PDF文件导入完成!")

if __name__ == "__main__":
    batch_import_pdfs()
  1. 在终端运行脚本:
python import_pdfs.py
注意事项
  • FileField在数据库中存储的是文件相对于MEDIA_ROOT的路径,所以检查重复时直接用文件名(或相对路径)即可。
  • 如果media文件夹里有子目录,需要修改遍历逻辑,加入递归遍历子文件夹的代码。
  • 导入前最好备份一下数据库,避免误操作导致数据重复或异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:52:33