2

次のエラーが発生しました。

sqlalchemy.exc.OperationalError
OperationalError: (OperationalError) no such table: user u'SELECT user.id AS user_id, user.name AS user_name, user.password AS user_password \nFROM user \nWHERE user.id = ?' (1,)

これをデバッグする方法はわかりませんが、models.py ファイルを使用して既に生成した db ファイルをロードしていないため、デバッグが必要だと思います。その db ファイルをロードし、users テーブルが存在することを確認しました。これはデータを処理しますが、フラスコ アプリケーションをデータベースに接続する方法がわかりません。

これは、テーブルを生成するために事前に実行した models.py です (その上の宣言は含めていません)。

from datetime import datetime
import os
from sqlalchemy import Column, ForeignKey
from sqlalchemy import Boolean, DateTime, Integer, String, Text
from sqlalchemy.orm import relationship, synonym, backref

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


""" User """
class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String(200))
    password = Column(String(100))

    def __init__(self, name, password):
        self.name = name
        self.password = password

    def __repr__(self):
        return '<User %r>' % self.name
if __name__ == '__main__':
    from datetime import timedelta

    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker

    PWD = os.path.abspath(os.curdir)

    engine = create_engine('sqlite:///{}/arkaios.db'.format(PWD), echo=True)

    Base.metadata.create_all(engine)
    Session = sessionmaker(bind=engine)
    session = Session()

    # Add a sample user
    user = User(name='Philip House', password="test")
    session.add(user)
    session.commit()

app.py は次のとおりです。

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask import render_template

from arkaios.models import Base, User
from arkaios import config

app = Flask(__name__)
app.config.from_object(config)

db = SQLAlchemy(app)
db.Model = Base

@app.route('/admin/large-group')
def largeGroupOverview():
    user = db.session.query(User).filter_by(id=1)
    return render_template('largegroup/overview.html', user=user)

@app.route('/admin/large-group/<int:event_id>')
def largeGroupAttendance(event_id):
    return render_template('largegroup/attendance.html')

@app.route('/focus')
def largegroup():
    return 'Focus work'

最後に、app.py は以下の config.py を参照します。

import os
PWD = os.path.abspath(os.curdir)

DEBUG=True
SQLALCHEMY_DATABASE_URI = 'sqlite:///{}/arkaios.db'.format(PWD)
SECRET_KEY = 'thisissecret'
SESSION_PROTECTION = 'strong'

必要に応じて、スタック トレースも投稿できます。Flask と SQLAlchemy を接続する方法について、私がどのように考えているかについて、概念的に何かが欠けているに違いないのですが、それを理解することはできません。

助けてくれてありがとう:)

4

1 に答える 1

0

データベースを作成するアプリのpython models.py前に実行していますか? python app.pyif __name__ == "__main__"、 からファイルをインポートするときに、コードのその部分が実行されないようにしますapp.py

また、コマンドを使用してデータベースが有効であることを確認し、コマンドsqlite3を実行し.tablesます。

于 2014-04-13T17:38:50.980 に答える