ошибка flask OperationalError: нет такого столбца

#python #sqlite #flask

#python #sqlite #flask

Вопрос:

Я хочу создать веб-сайт с помощью 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()
  

Я провел некоторое исследование в Интернете, но ничего не нашел…
Как я могу это исправить?

Комментарии:

1. Проверьте мой ответ

Ответ №1:

Действительно похоже, что вы не создали файл sqlite, если вы смотрите в своем каталоге вашего проекта и не видите файл ‘home.db’, то это именно он.

Затем откройте терминал python и сделайте это:

  1. CMD с в папке envirorments:

     >>> 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’ при каждом внесении изменений