【问题标题】:flask OperationalError: no such column烧瓶操作错误:没有这样的列
【发布时间】:2020-12-09 18:08:47
【问题描述】:

我想用flask创建一个网站,里面有一个表格,里面有用户用html表单放在那里的链接。

from flask import Flask, render_template, request, redirect
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

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

class links(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), nullable=True)
    title = db.Column(db.String(30), nullable=False)
    link = db.Column(db.String(200), nullable=False)
    date_added = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    
    def __repr__(self):
        return f'<link {self.id}>'

@app.route('/home', methods=['GET', 'POST'])
def home ():
    if request.method == 'POST':
        link_name = request.form["name"]
        link_title = request.form["title"]
        link_link = request.form["link"]
        new_link = links(name=link_name, title=link_title, link=link_link)
        
        try:
            db.session.add(new_link)
            db.session.commit()
            return redirect('/home')
        except:
            return 'there was a problem'
    else:
        li = links.query.order_by(links.date_added).all()
        return render_template('home.html', li=li)
        
if __name__ == "__main__":
    app.run(debug=True)

我不断收到此错误消息,

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) 没有这样的列:links.name

它说它在这一行:

li = links.query.order_by(links.date_added).all()

我在互联网上做了一些研究,但我没有找到任何东西...... 我该如何解决这个问题?

【问题讨论】:

  • 检查我的答案

标签: python sqlite flask


【解决方案1】:

看起来你还没有创建 sqlite 文件,如果你在你的项目目录中看到并且你没有看到一个 'home.db' 文件而不是它。

然后打开python终端并执行以下操作:

  1. 环境文件夹中的CMD:

    >>> from app import db
    >>> db.create_all()
    >>> exit() #or ctrl + z then enter 
    
    

注意

如果您已经看到名为 'home.db' 的文件被删除并再次运行上述代码,这是因为您可能已经创建了该文件,但随后添加了 'name = db.Column(db.String( 30), nullable=True)' 后面。

如果上面提到的没有解决问题,那么检查你的代码行:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///home.db'

>到这个:

导入操作系统

app = Flask(__name__)

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

然后当然运行代码。还记得每次进行更改时删除文件“home.db”

【讨论】:

    猜你喜欢
    • 2020-03-20
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2014-03-26
    • 2016-01-05
    相关资源
    最近更新 更多