【问题标题】:AttributeError: 'scoped_session' object has no attribute 'session'AttributeError:“scoped_session”对象没有属性“会话”
【发布时间】:2020-03-26 14:26:59
【问题描述】:

我正在尝试将新数据插入我的数据库,但我的 Web 应用程序返回此错误。 我的代码如下:

models.py

import os

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

...

class Patient(db.Model):
    __tablename__ = "patients"
    id = db.Column(db.Integer, primary_key=True)
    lname = db.Column(db.String, nullable=False)
    fname = db.Column(db.String, nullable=False)
    mname = db.Column(db.String, nullable=True)
    address = db.Column(db.String, nullable=False)
    birthdate = db.Column(db.Date, nullable=False)
    date_modified = db.Column(db.DateTime, nullable=False)
    modified_by = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
    date_created = db.Column(db.DateTime, nullable=False)
    created_by = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)

    def __init__(self, fname, mname, lname):
        self.fname = fname
        self.mname = mname
        self.lname = lname

应用程序.py

import os

from flask import *
from flask_session import Session
from sqlalchemy import *
from sqlalchemy.orm import scoped_session, sessionmaker
from models import *

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = os.getenv("DATABASE_URL")

# Check for environment variable
if not os.getenv("DATABASE_URL"):
    raise RuntimeError("DATABASE_URL is not set")

app.secret_key = '######'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db.init_app(app)

engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))

...

@app.route("/submitpatient",  methods=["POST"])
def submitpatient():
    fname = request.form.get("fname")
    mname = request.form.get("mname")
    lname = request.form.get("lname")

    patient = Patient(fname=fname, mname=mname, lname=lname)

    db.session.add(patient)
    db.session.commit()

    return redirect(url_for('index'))

我是 python 新手,几个小时以来我一直试图在我的代码中找到错误,但我似乎找不到任何可以帮助我的东西。

【问题讨论】:

    标签: python flask orm sqlalchemy


    【解决方案1】:

    我猜你在使用它后创建构造函数“Session”时错过的问题,
    代码将是:

    # create a configured "Session" class
    Session = scoped_session(sessionmaker(bind=engine))
    @app.route("/submitpatient",  methods=["POST"])
    def submitpatient():
        fname = request.form.get("fname")
        mname = request.form.get("mname")
        lname = request.form.get("lname")
    
        patient = Patient(fname=fname, mname=mname, lname=lname)
        #create a Session
        session = Session()
    
        session.add(patient)
        session.commit()
    
        return redirect(url_for('index'))
    

    更多信息,请参阅this

    【讨论】:

    • 我试过这样做,但不幸的是它仍然产生同样的错误
    【解决方案2】:

    如果你只是 addcommit 如下,

    db.add(patient)
    db.commit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 2012-12-01
      • 2021-04-19
      • 1970-01-01
      相关资源
      最近更新 更多