scoped_session 对象没有属性 'create_all'

scoped_session object has no attribute 'create_all'

我有以下代码使用 Flask-SQLAlchemy 设置我的数据库。我遇到异常 "AttributeError: scoped_session object has no attribute 'create_all'"。有人可以向我解释为什么会出现错误以及如何解决吗? :)

__init__.py:

from flask import Flask

app = Flask(__name__)
from app.db import DB

database = DB()
database.create_all()

db/__init__.py:

from flask import session
from flask.ext.sqlalchemy import SQLAlchemy
from app import app

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:pass@dburl:/schema'
connection = SQLAlchemy(app)

from app.db.models import *

class DB():
    def __init__(self):
         pass

    def create_all(self):
        connection.session.create_all()
        connection.session.commit()
        print("done")

models.py:

from app.db import connection as db

class Test(db.Model):
    __tablename__ = 'Test'

    id = db.Column("ID", db.Integer, primary_key=True)
    name = db.Column("Name", db.String(100), nullable=False)

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

    def __repr__(self):
        return '<Test: %s>' % self.name

任何指导将不胜感激!

connection.create_all(),你在中间加了session


与眼前的问题无关,还有其他看起来不对的地方。

  • 您不需要在 运行 create_all 之后提交。
  • 扩展实例通常命名为dbDB class 什么都不做,只需自己编写 create_all 函数即可。
  • Flask-SQLAlchemy模型大多数情况下不需要指定table或列名,一般不使用大写名称。
  • 不要使用制表符,PEP 8 建议使用 4 个空格。