V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nymrli
V2EX  ›  问与答

求助, flask_sqlalchemy + pymysql 链接 mysql 报错

  •  
  •   nymrli · 2018-10-28 10:56:57 +08:00 · 4264 次点击
    这是一个创建于 1999 天前的主题,其中的信息可能已经有所发展或是发生改变。
    from flask import Flask
    
    from flask_sqlalchemy import SQLAlchemy
    import config
    
    app = Flask(__name__)
    
    app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:cl123123@localhost:3306/flask_test?charset=utf8"
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    
    # app.config.from_object(config)
    db = SQLAlchemy(app)
    db.create_all()
    
    @app.route('/')
    def home():
        return '<h1>Hello World!</h1>'
    
    # class User(db.Model):
    #     __tablename__ = 'user_table_name'
    #     id = db.Column(db.Integer(), primary_key=True)
    #     username = db.Column(db.String(255))
    #     password = db.Column(db.String(255))
    
    
    
    if __name__ == '__main__':
        # manager.run()
        app.run(debug=True)
    
    

    报错为 sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:mysql.pymysql 请问该如何解决呢?

    2 条回复    2018-10-28 11:37:21 +08:00
    lniwn
        1
    lniwn  
       2018-10-28 11:33:15 +08:00
    报错已经很明确了,我觉得你要先搞清楚,flask_sqlalchemy, SQLAlchemy, pymysql 这三者直接的关系。
    flask_sqlalchemy:针对 SQLAlchemy 框架的 flask 插件,方便在 flask 中使用 SQLAlchemy。
    SQLAlchemy:ORM 框架,具体实现还需要依赖各个数据库自己的 driver。
    pymysql:mysql 的 python 版本 DB API,某种意义上,可以简单理解为上面说的 driver。
    lniwn
        2
    lniwn  
       2018-10-28 11:37:21 +08:00
    @lniwn #1 补充一点:
    这是三个不同的库,都需要单独安装的,但是你安装了 flask_sqlalchemy 就直接可以使用 SQLAlchemy,是因为 pip 会读取 dependency,自动帮你安装。没有自动安装的,就要手动安装了,比如 mysql 的 dialect:pymysql,或者其他数据库的 dialect。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2820 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:23 · PVG 23:23 · LAX 08:23 · JFK 11:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.