Как импортировать базу данных, созданную с помощью SQLAlchemy, в приложение Flask? - PullRequest
0 голосов
/ 19 марта 2020

новичок в веб-разработке. У меня есть три файла. database_setup.py с моими классами таблиц. restaurant.py используется для заполнения таблиц и script.py для flask app

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)

restaurant.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()

script.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. Когда я запускаю приложение, оно создает новую и пустую базу данных, потому что я использую «engine =» create_engine () »в script.py и мне нужно использовать его для привязки к engine и использования сеанса.

Ошибка при запуске приложения «AttributeError: у объекта« NoneType »нет атрибута« name »»

1 Ответ

0 голосов
/ 20 марта 2020

Вот что я делаю для работы с 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()
...