zoukankan      html  css  js  c++  java
  • SQLAlchemy 应用创建

    1.首先创建app文件夹

    同django 创建app 一样 创建文件

    在创建的views中写入两个蓝图函数为了操作数据库的增删改查

    acc.py

    from flask import Blueprint
    
    acc = Blueprint("acc",__name__)
    
    @acc.route("/acc")
    def acc_func():
        return "这是acc蓝图页面"

    在__init__.py下写入create_app()函数

    from flask import Flask
    from app.views.acc import acc
    from app.views.user import user
    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy()
    session=db.session
    def create_app():
    
        my_app =Flask(__name__)
    
        my_app.register_blueprint(acc)
        my_app.register_blueprint(user)
    
        return my_app
    
    
    if __name__ == '__main__':
        app=create_app()
        app.run()

    若运行成功,就完成重要的第一步了

    第二步创建数据库表名

    在models.py 内创建数据

    from app import db
    
    class User(db.Model):
    
        __tablename__ ="user"
        __table_args__ = {"useexisting":True}
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(32))
    
    if __name__ == '__main__':
        from app import create_app
        my_app = create_app()
    
        db.drop_all(app=my_app)
        db.create_all(app=my_app)

    观察发现没有engine可以连接数据库

    解决 :在__init__下写为

    from flask import Flask
    from app.views.acc import acc
    from app.views.user import user
    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy()
    session=db.session
    def create_app():
    
        my_app =Flask(__name__)
    
        my_app.config["SQLALCHEMY_DATABASE_URI"]="mysql+pymysql://root:@127.0.0.1:3306/day128?charset=utf8"
        # SQLALCHEMY_POOL_SIZE 配置 SQLAlchemy 的连接池大小
        my_app.config["SQLALCHEMY_POOL_SIZE"] = 5
        # SQLALCHEMY_POOL_TIMEOUT 配置 SQLAlchemy 的连接超时时间
        my_app.config["SQLALCHEMY_POOL_TIMEOUT"] = 15
        my_app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
    
        db.init_app(my_app)
        my_app.register_blueprint(acc)
        my_app.register_blueprint(user)
        return my_app

    db=db = SQLAlchemy()   db.model  相当于 Base()

    这个时候就会发现数据库增加一张user表

    第三部 进行数据的增添

    在创建的user.py蓝图中,进行操作

    from flask import Blueprint,jsonify
    
    user = Blueprint("user",__name__)
    
    @user.route("/user")
    
    def user_func():
    
        from app.models import User
        from app import db
        user_obj = User(name="zq")
        db.session.add(user_obj)
        db.session.commit()
        return "这是user蓝图"
    
    @user.route("/user_list")
    def user_list():
        from app.models import User
    
        res = User.query.first()
        ret ={"username":res.name}
    
        return jsonify(ret)

    为了仿照django,在manager.py进行启动

    这里用到了装饰器

    from flask_script import Manager
    @manager.command
     
    import MyApp
    # 导入 Flask-Script 中的 Manager
    from flask_script import Manager
    
    app = MyApp.create_app()
    # 让app支持 Manager
    manager = Manager(app)
    
    if __name__ == '__main__':
        #app.run()
        # 替换原有的app.run(),然后大功告成了
        manager.run()
    
    MyApp/manager.py
    Manager的两种用法
    @manager.command
    def runflask():
        my_app.run()
        return "成功"
    #第一种就是通过终端启动程序,输入python manager.py runflask
    #即可运行经过@manager.command 装饰的函数,就这相当于在终端启动了程序
    同django的python manager.py runserver
    @manager.option("-n","--name",dest="name") def run_flask(name="127.0.0.7",say="5000"): a=input("真的启动me?") if a=='y': my_app.run(name,int(say)) else: return f"{name}真{say}"

    #第二种装饰器@manager.opation("-短指令","--长指令",dest="变量名")
    # 输入python manager.py run_flask

    即可以进行传参的装饰器
    如下详解

    @manager.option("-n","--name",dest="name")
     
    import MyApp
    # 导入 Flask-Script 中的 Manager
    from flask_script import Manager
    
    app = MyApp.create_app()
    # 让app支持 Manager
    manager = Manager(app) # type:Manager
    
    @manager.command
    def DragonFire(arg):
        print(arg)
    
    @manager.option("-n","--name",dest="name")
    @manager.option("-s","--say",dest="say")
    def talk(name,say):
        print(f"{name}你可真{say}")
    
    if __name__ == '__main__':
        #app.run()
        # 替换原有的app.run(),然后大功告成了
        manager.run()
    
    MyApp/manager.py

     通过上述例子了解到可以进行 my_app.run(name,int(say))

    前后输入 "127.0.0.1" 5000 即可

    第四步 Migrate进行数据库迁移

    在manager.py引用

    from flask_migrate import Migrate,MigrateCommand

    举例
    import MyApp
    # 导入 Flask-Script 中的 Manager
    from flask_script import Manager
    
    # 导入 Flask-Migrate 中的 Migrate 和 MigrateCommand
    # 这两个东西说白了就是想在 Flask-Script 中添加几个命令和指令而已
    from flask_migrate import Migrate,MigrateCommand
    
    app = MyApp.create_app()
    # 让app支持 Manager
    manager = Manager(app) # type:Manager
    
    # Migrate 既然是数据库迁移,那么就得告诉他数据库在哪里
    # 并且告诉他要支持那个app
    Migrate(app,MyApp.db)
    # 现在就要告诉manager 有新的指令了,这个新指令在MigrateCommand 中存着呢
    manager.add_command("db",MigrateCommand) # 当你的命令中出现 db 指令,则去MigrateCommand中寻找对应关系
    """
    数据库迁移指令:
    python manager.py db init 
    python manager.py db migrate   # Django中的 makemigration
    python manager.py db upgrade  # Django中的 migrate
    """
    
    
    @manager.command
    def DragonFire(arg):
        print(arg)
    
    @manager.option("-n","--name",dest="name")
    @manager.option("-s","--say",dest="say")
    def talk(name,say):
        print(f"{name}你可真{say}")
    
    if __name__ == '__main__':
        #app.run()
        # 替换原有的app.run(),然后大功告成了
        manager.run()
    
    MyApp/manager.py
    
    

    我的manage.py

    import app
    from flask_script import Manager
    from flask_migrate import Migrate,MigrateCommand
    
    my_app = app.create_app()
    manager=Manager(my_app)
    
    from app import db
    Migrate(my_app,db)
    
    manager.add_command("database",MigrateCommand)
    
    @manager.command
    def runflask():
        my_app.run()
        return "成功"
    
    @manager.option("-n","--name",dest="name")
    def run_flask(name="127.0.0.7",say="5000"):
        a=input("真的启动me?")
        if a=='y':
            my_app.run(name,int(say))
        else:
            return f"{name}真{say}"
    
    if __name__ == '__main__':
        manager.run()

    在终端输入

    python manager.py database init
    python manager.py database migrate
    python manager.py database migrated
    就创建完成了
  • 相关阅读:
    *** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory
    linker command failed with exit code 1 (use -v to see invocation)
    谈谈我对PhoneGap的看法——(摘自唐巧的技术博客)
    ssh key一键自动化生成公钥私钥,并自动分发上百服务器免密码交互
    2018年Linux运维人员必会开源运维工具体系总结
    CentOS 6下PXE+Kickstart无人值守安装操作系统
    IOS优秀博客
    Nginx简单实现网站的负载均衡
    堆排序 Heap Sort
    h5移动端设计页面
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/10385555.html
Copyright © 2011-2022 走看看