东海ECS 2023-03-18 11:00 采纳率: 66.7%
浏览 24
已结题

Python Flask-SQLAlchemy创建数据库报错

使用Flask-SQLAlchemy创建数据库时候报错
此电脑上有MySQL8.0,用户名root,密码eastchinasea,有数据库flask_demo.db
代码:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql

app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = (
    'mysql+pymysql://root:eastchinasea@localhost/flask_demo'
)
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, autoincrement = True, primary_key = True)
    username = db.Column(db.String(80), unique = True, nullable = False)
    email = db.Column(db.String(120), unique = True, nullable = False)

    def __repr__(self):
        return '<User %r>' % self.username


if __name__ == '__main__':
    db.create_all()
运行结果及详细报错内容:
Traceback (most recent call last):
  File "D:\Program\Python\Python Web\Flask_\SQLflask\manage.py", line 23, in <module>
    db.create_all()
  File "D:\Program\Python\venv\Lib\site-packages\flask_sqlalchemy\extension.py", line 884, in create_all
    self._call_for_binds(bind_key, "create_all")
  File "D:\Program\Python\venv\Lib\site-packages\flask_sqlalchemy\extension.py", line 855, in _call_for_binds
    engine = self.engines[key]
             ^^^^^^^^^^^^
  File "D:\Program\Python\venv\Lib\site-packages\flask_sqlalchemy\extension.py", line 636, in engines
    app = current_app._get_current_object()  # type: ignore[attr-defined]
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Program\Python\venv\Lib\site-packages\werkzeug\local.py", line 513, in _get_current_object
    raise RuntimeError(unbound_message) from None
RuntimeError: Working outside of application context.

This typically means that you attempted to use functionality that needed
the current application. To solve this, set up an application context
with app.app_context(). See the documentation for more information.
我尝试过的方法:

我把这个

app.config['SQLALCHEMY_DATABASE_URI'] = (
    'mysql+pymysql://root:eastchinasea@localhost/flask_demo'
)

里面的

mysql+pymysql://root:eastchinasea@localhost/flask_demo

修改了很多次,还是有错误,如:

mysql+pymysql://root:eastchinasea@127.0.0.1/flask_demo
mysql+pymysql://root:eastchinasea@localhost/flask_demo.db

改了很多次还是有错误.

我想使用此扩展成功创建数据库
  • 写回答

3条回答 默认 最新

  • lshen01 2023-03-18 11:03
    关注

    参考GPT和自己的思路:

    根据错误信息显示,问题出在当前代码运行的环境上下文中没有应用程序上下文。建议您将 db.create_all() 这个代码包装在 app.app_context() 上下文管理器中。具体修改方法如下:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    import pymysql
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    app.config['SQLALCHEMY_DATABASE_URI'] = (
        'mysql+pymysql://root:eastchinasea@localhost/flask_demo'
    )
    db = SQLAlchemy(app)
    
    
    class User(db.Model):
        id = db.Column(db.Integer, autoincrement = True, primary_key = True)
        username = db.Column(db.String(80), unique = True, nullable = False)
        email = db.Column(db.String(120), unique = True, nullable = False)
    
        def __repr__(self):
            return '<User %r>' % self.username
    
    
    if __name__ == '__main__':
        with app.app_context():
            db.create_all()
    

    另外,在配置 app.config['SQLALCHEMY_DATABASE_URI'] 时也可能出现拼写错误或者语法错误,建议仔细检查配置信息是否正确。

    如果您还有其他问题或者疑问,可以随时联系我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!