【问题标题】:How do I import a database made with SQLAlchemy to Flask app?如何将使用 SQLAlchemy 制作的数据库导入 Flask 应用程序?
【发布时间】:2020-06-30 05:11:36
【问题描述】:

Web 开发新手。我有三个文件。 database_setup.py 和我的表类。 restaurant.py 用于为烧瓶应用填充表格和 script.py

database_setup.py

import os

import sys
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine

Base = declarative_base()

class Restaurant(Base):
    __tablename__ = 'restaurant'

    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)         

engine = create_engine('sqlite:///restaurantmenu.db')


Base.metadata.create_all(engine)

餐厅.py

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from database_setup import Restaurant, Base, MenuItem

engine = create_engine('sqlite:///restaurantmenu.db')

Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)

session = DBSession()


restaurant = Restaurant(name= "Kasra")
session.add(restaurant)
session.commit()

脚本.py

from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker,scoped_session
from database_setup import Base, Restaurant

app = Flask(__name__)

engine = create_engine('sqlite:///restaurantmenu.db')
Base.metadata.bind = engine

DBSession = scoped_session(sessionmaker(bind=engine))
session = DBSession()

@app.route('/')
@app.route('/hello')
def HelloWorld():
    restaurant = session.query(Restaurant).first()
    return restaurant.name


if __name__ == "__main__":
    app.run(debug=True)

我要做的是将restarant.py中创建的数据库导入script.py。当我运行应用程序时,它会创建一个新的空数据库,因为我在 script.py 中使用“engine =”create_engine()”,我需要使用它来绑定引擎并使用会话。

运行应用时出现的错误“AttributeError: 'NoneType' object has no attribute 'name'”

【问题讨论】:

  • 请分享完整的异常日志或堆栈跟踪。
  • 您当然只想要一个,engine = create_engine(...) 在您的代码中调用。在restaurant.pyscript.py 中,您与数据库的唯一交互是通过会话,因此在database_setup.py 中构造您的scoped_session 实例并将会话导入restaurant.pyscript.py
  • 那么从 database_setup.py 导入引擎到这两个文件?

标签: flask sqlalchemy flask-sqlalchemy


【解决方案1】:

这是我使用 Flask 和 SQLAlchemy 操作的方法:

在 database.py 文件中:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import Base

engine = create_engine(Config.SQLALCHEMY_DATABASE_URI)
session_factory = sessionmaker(bind=engine)

def init_db():
    Base.metadata.create_all(bind=engine)

所有模型类都位于一个 models.py 文件中,并且也是从声明性基础派生的:

Base = declarative_base()

然后启动python脚本包含(仅关键部分):

app = Flask(__name__)
session = flask_scoped_session(session_factory, app)

if __name__ == "__main__":
    database.init_db()
    app.run()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2018-07-20
    • 2013-07-21
    • 2014-05-20
    • 2021-01-24
    • 2014-03-25
    相关资源
    最近更新 更多