Django运行migrate等命令报no such table: django_session错误求助
问题解决与开发实现指引
一、django.db.utils.OperationalError: no such table: django_session 报错解决
直接按以下顺序执行操作即可解决:
- 先删除项目根目录的SQLite数据库文件
db.sqlite3,再删除audioma_manager应用下migrations目录中除__init__.py外的所有文件 - 确认
audioma_manager已经添加到settings.py的INSTALLED_APPS列表中,未添加会导致迁移不生效 - 执行
python manage.py makemigrations audioma_manager生成应用专属迁移文件 - 先执行依赖迁移
python manage.py migrate auth,session表属于auth模块依赖表,优先迁移可避免生成异常 - 最后执行全量迁移
python manage.py migrate,此时session表已正常生成,后续执行runserver等命令不会再抛出该错误
如果使用MySQL/PostgreSQL等非SQLite数据库,额外确认数据库服务运行正常、配置的数据库用户具备建表权限后再走上述流程即可。
二、需求实现步骤
1. 仓库创建、项目初始化与首次提交
- 本地新建项目根目录后执行
git init初始化Git仓库 - 根目录新建
.gitignore文件,添加忽略规则:# Django运行生成文件 db.sqlite3 /static/ /media/ *.pyc __pycache__/ # 敏感配置文件 .env # IDE配置 .vscode/ .idea/ - 执行
django-admin startproject audioma_manager .初始化Django项目结构 - 依次执行
git add .、git commit -m "feat: 初始化Django项目基础结构"完成首次提交
2. 基于django-environ的配置实现
- 先执行
pip install django-environ安装依赖 - 在
settings.py头部导入并初始化environ:import environ env = environ.Env() environ.Env.read_env(env_file='.env') - 项目根目录新建
.env文件,添加配置项:# 企业API认证信息 ENTERPRISE_API_KEY=你的企业API密钥 ENTERPRISE_API_BASE_URL=https://你的企业API根域名 # 存储与命名配置 AUDIO_UPLOAD_PATH=uploads/audio/ AUDIO_FILE_NAMING_RULE={user_id}_{timestamp}_{original_name} - 在
settings.py末尾添加对应配置读取逻辑:# 企业API配置 ENTERPRISE_API_KEY = env('ENTERPRISE_API_KEY') ENTERPRISE_API_BASE_URL = env('ENTERPRISE_API_BASE_URL') # 转录文件配置 AUDIO_UPLOAD_PATH = env('AUDIO_UPLOAD_PATH', default='uploads/audio/') AUDIO_FILE_NAMING_RULE = env('AUDIO_FILE_NAMING_RULE', default='{timestamp}_{original_name}')
3. Transcription模型开发
在audioma_manager应用的models.py中添加模型定义:
from django.db import models class Transcription(models.Model): id = models.BigAutoField(primary_key=True) file_name = models.CharField(max_length=255, verbose_name='文件名') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta: verbose_name = '转录任务' verbose_name_plural = verbose_name db_table = 'transcription' def __str__(self): return self.file_name
新增后执行python manage.py makemigrations、python manage.py migrate即可生成对应数据表。
4. 企业API源列表拉取客户端实现
在audioma_manager应用下新建api_client.py:
import requests from django.conf import settings class EnterpriseAPIClient: def __init__(self): self.base_url = settings.ENTERPRISE_API_BASE_URL self.headers = { "Authorization": f"Bearer {settings.ENTERPRISE_API_KEY}", "Content-Type": "application/json" } def list_api_sources(self, name_filter=None, representation=True): params = {} # 支持按名称筛选 if name_filter: params["name"] = name_filter # 支持representation查询参数 if representation: params["representation"] = "full" resp = requests.get( f"{self.base_url}/api/sources", headers=self.headers, params=params ) resp.raise_for_status() return resp.json()
5. 转录提交表单页面开发
表单类定义(forms.py)
from django import forms from .api_client import EnterpriseAPIClient class TranscriptionSubmitForm(forms.Form): date = forms.DateField(label="提交日期", widget=forms.DateInput(attrs={"type": "date"})) api_source = forms.ChoiceField(label="API源", choices=[]) language = forms.ChoiceField(label="语言", choices=[ ("zh", "中文"), ("en", "英文"), ("ja", "日文") ]) title = forms.CharField(label="标题", max_length=255) extra_config = forms.JSONField(label="可选配置", required=False, widget=forms.Textarea(attrs={"rows": 3})) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 动态拉取API源填充下拉选项 client = EnterpriseAPIClient() sources = client.list_api_sources() self.fields["api_source"].choices = [(item["id"], item["name"]) for item in sources]
视图定义(views.py)
from django.shortcuts import render, redirect from .forms import TranscriptionSubmitForm from .models import Transcription def submit_transcription(request): if request.method == "POST": form = TranscriptionSubmitForm(request.POST) if form.is_valid(): # 可在此处添加调用企业API提交转录任务的逻辑 Transcription.objects.create( file_name=form.cleaned_data["title"] ) return redirect("submit_success") else: form = TranscriptionSubmitForm() return render(request, "submit_transcription.html", {"form": form})
模板文件(templates/submit_transcription.html)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>提交转录任务</title> </head> <body> <h1>转录任务提交</h1> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">提交任务</button> </form> </body> </html>
最后在项目urls.py中添加对应路由即可访问该页面。
内容的提问来源于stack exchange,提问作者Maicol Pini
相关产品推荐
相关产品推荐

