【发布时间】: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.py和script.py中,您与数据库的唯一交互是通过会话,因此在database_setup.py中构造您的scoped_session实例并将会话导入restaurant.py和script.py。 -
那么从 database_setup.py 导入引擎到这两个文件?
标签: flask sqlalchemy flask-sqlalchemy