AttributeError: 'scoped_session' 对象没有属性 'get'

我正在尝试从我的数据库中删除数据,但我的 Web 应用程序返回此错误:


File "C:\Users\q\Pyc\Flask\basic_of_flask\SQL Database with flask\Database in view\adoption_sit.py", line 78, in  del_pup


pup = db.session.get(id)


AttributeError: 'scoped_session' object has no attribute 'get'

看看下面我的代码


import os

from flask import Flask, redirect, render_template, url_for

from flask_migrate import Migrate

from flask_sqlalchemy import SQLAlchemy

from form import AddForm, DelForm


app = Flask(__name__)


app.config['SECRET_KEY'] = 'mysecretkey'


#######################################

#### SQL DATABASE SECTION #############

#######################################


basedir = os.path.abspath(os.path.dirname(__file__))

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False


db = SQLAlchemy(app)

Migrate(app, db)



########################################

######## Models ########################

########################################


class Puppy(db.Model):

    __tablename__ = 'puppies'


    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.Text)


    def __init__(self, name):

        self.name = name


    def __repr__(self):

        return f"Puppy name is {self.name}."



#############################################

##### VIEW FUNCTIONS -- HAVE FORM ###########

#############################################


@app.route('/')

def index():

    return render_template('home.html')



@app.route('/add', methods=['GET', 'POST'])

def add_pup():

    form = AddForm()


    if form.validate_on_submit():

        name = form.name.data

        new_puppy = Puppy(name)

        db.session.add(new_puppy)

        db.session.commit()


        return redirect(url_for('list_pup'))


    return render_template('add.html', form=form)



@app.route('/list_pup')

def list_pup():

    puppies = Puppy.query.all()

    return render_template('list.html', puppies=puppies)


幕布斯7119047
浏览 264回答 1
1回答

烙印99

del_pup()我猜你在功能上做错了事[..]    pup = db.session.get(id)  # here您需要Puppy使用给定的对象获取对象id:@app.route('/delete', methods=['GET', 'POST'])def del_pup():    form = DelForm()    if form.validate_on_submit():        id = form.id.data        # pup = db.session.get(id)  # wrong way        pup = Puppy.query.filter_by(id=id).first()`  # here        db.session.delete(pup)        db.session.commit()        return redirect(url_for('list_pup'))    return render_template('delete.html', form=form)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python