You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

运行含SQLAlchemy与Flask的Python文件时遇错误,求技术支持

排查Flask+SQLAlchemy脚本运行错误的常见思路

先把你提供的代码贴出来方便分析:

#! /usr/bin/env python2
# SQLAlchemy uses to communicate with various types of DB---APIs and databases.
import os
import sys
from sqlalchemy import create_engine, asc
from sqlalchemy.orm import sessionmaker, relationship
from database_setup import Base, Restaurant, MenuItem, User
from flask import Flask, render_template, request, redirect, url_for
from flask import jsonify, flash
from flask import session as login_session
# login_session is working as a dictionary and save data for session when ...

虽然你没说具体报了什么错,但根据这段代码,我给你列几个大概率会踩的坑和解决办法:

1. Python2版本过时的问题

你的脚本开头指定了Python2,但现在Flask、SQLAlchemy的新版本早就放弃支持Python2了。如果你的环境装的是新版依赖,肯定会报错。

  • 推荐直接切换到Python3:把shebang改成#!/usr/bin/env python3(毕竟Python2已经退役好几年了)
  • 非要用Python2的话,得装兼容的旧版本依赖:
    pip install flask==2.0.3 sqlalchemy==1.4.46
    
    这俩是最后一批支持Python2的Flask和SQLAlchemy版本。

2. database_setup.py的导入问题

你从database_setup.py导入了几个模型类,但如果这个文件不存在、路径不对,或者里面的类名写错了,会直接报ImportError

  • 先确认database_setup.py和当前脚本在同一个文件夹里
  • 打开database_setup.py检查:是不是正确定义了BaseRestaurantMenuItemUser,而且这些类都继承了SQLAlchemy的Base

3. 多余的relationship导入

你从sqlalchemy.orm导入了relationship,但这个东西是用来在模型类里定义关联关系的(比如Restaurant和MenuItem的一对多关系),主脚本里根本用不上它。要么删掉这个导入,要么检查是不是把导入写错位置了(应该在database_setup.py里导入)。

4. Flask会话的配置缺失

你用到了login_session(也就是Flask的session功能),但如果没给Flask app设置SECRET_KEY,会话功能会直接报错。

  • 初始化Flask app的时候一定要加这个:
    app = Flask(__name__)
    app.secret_key = '随便整个随机字符串就行,比如abc123xyz'
    

5. 数据库会话没初始化

你导入了create_enginesessionmaker,但代码里没看到创建数据库引擎和会话的代码,比如:

# 举个SQLite的例子,你换成自己用的数据库连接字符串就行
engine = create_engine('sqlite:///restaurantmenu.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()

没这段代码的话,后面想操作数据库就会报错。

如果能把具体的错误信息(比如终端里的Traceback)贴出来,我能更精准地帮你定位问题。先从上面几个点排查,应该能解决大部分常见问题。

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

火山引擎 最新活动