Flask-SQLAlchemy AttributeError:无法设置属性

时间:2021-03-16 21:56:56

标签: python sqlite flask sqlalchemy flask-sqlalchemy

我尝试创建一个数据库并将文章表放在 routes.py 的 /articles/ 路由中,但它给了我 AttributeError: can't set attribute。我查找了其他来源的解决方案,但它们似乎无关紧要。使用 create_all()、add()、commit() 时出错。

models.py

from files import db
from datetime import datetime

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False,unique=True)
    article_content = db.Column(db.Text)
    date = db.Column(db.DateTime,default=datetime.utcnow)
    abstract = db.Column(db.String(150))
    comments = db.relationship("Comment", backref="article", lazy = True)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_name = db.Column(db.String(30), unique=True, nullable=False)
    password = db.Column(db.String(30), nullable=False)
    comments = db.relationship("Comment", backref="user", lazy = True)

class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_comment = db.Column(db.String(200), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    article_id = db.Column(db.Integer, db.ForeignKey("article.id"))

init.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SECRET_KEY'] = ''
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)

from files import routes

routes.py

from files import app, db
from flask import render_template
from files.models import Article
from files.forms import RegisterForm, LoginForm

@app.route('/')
@app.route('/main')
@app.route('/home')
def home():
    return render_template("home.html")

@app.route('/articles/<article_name>') # dynamic route
def article(article_name):
    db.create_all()

    article_ = Article(title = article_name, article_content = "article", abstract = "ndng")

    db.session.add(article_)
    db.session.commit()
    return render_template("article.html", article_name=article_name)

@app.route('/articles')
def articles():
    return render_template("articles.html")

@app.route('/register')
def register():
    form = RegisterForm()
    return render_template("register.html", form = form)


@app.route('/login')
def login():
    form = LoginForm()
    return render_template("login.html", form = form)

3 个答案:

答案 0 :(得分:2)

我最近发现了同样的错误信息。这实际上是由于 SQLAlchemy 的升级,它作为flask-sqlalchemy 的依赖项安装。

您可以找到我在 stackoverflow 上针对问题 here 发布的问题:

问题通过卸载 SQLAlchemy==1.4.0 并安装以前版本的 SQLAlchemy==1.3.23 解决。

尝试这样做,看看是否有帮助。

答案 1 :(得分:2)

只需降级 SQLAlchemy 。 由于某种原因,最新版本不起作用

pip install 'SQLAlchemy<1.4.0'

答案 2 :(得分:0)

将 SQLAlchemy 降级到低于 1.4.0(在我的例子中是 1.3.8)可以解决问题。