zoukankan      html  css  js  c++  java
  • flask框架----整合Flask中的目录结构

    一、SQLAlchemy-Utils

    由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法

    import datetime
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index
    from sqlalchemy.orm import relationship
    from sqlalchemy_utils import ChoiceType
    
    Base = declarative_base()
    class Xuan(Base):
        __tablename__ = 'xuan'
        types_choices = (
            (1,'欧美'),
            (2,'日韩'),
            (3,'老男孩'),
        )
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(64))
        types = Column(ChoiceType(types_choices,Integer()))
    
        __table_args__ = {
            'mysql_engine':'Innodb',
            'mysql_charset':'utf8',
        }
    
    engine = create_engine(
        "mysql+pymysql://root:123@127.0.0.1:3306/ttt2?charset=utf8",
        max_overflow=0,  # 超过连接池大小外最多创建的连接
        pool_size=5,  # 连接池大小
        pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
        pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
    )
    
    Base.metadata.create_all(engine)


    查询:

      result_list = session.query(Xuan).all()
      for item in result_list:
        print(item.types.code,item.types.value)

     

     二、scoped_session

    from sqlalchemy.orm import sessionmaker
    from sqlalchemy import create_engine
    from sqlalchemy.orm import scoped_session
    engine = create_engine(
            "mysql+pymysql://root:123@47.93.4.198:3306/ttt?charset=utf8",
            max_overflow=0,  # 超过连接池大小外最多创建的连接
            pool_size=5,  # 连接池大小
            pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
            pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
    )
    SessionFactory = sessionmaker(bind=engine)
    # 方式一:由于无法提供线程共享功能,所有在开发时要注意,在每个线程中自己创建 session。
    #         from sqlalchemy.orm.session import Session
    #         自己具有操作数据库的:'close', 'commit', 'connection', 'delete', 'execute', 'expire',.....
    session = SessionFactory()
    
    # print('原生session',session)
    # 操作
    session.close()
    
    
    # 方式二:支持线程安全,为每个线程创建一个session
    #               - threading.Local
    #               - 唯一标识
    # ScopedSession对象
    #       self.registry(), 加括号 创建session
    #       self.registry(), 加括号 创建session
    #       self.registry(), 加括号 创建session
    from greenlet import getcurrent as get_ident
    session = scoped_session(SessionFactory,get_ident)
    # session.add
    # 操作
    session.remove()

    三、Flask-SQLAlchemy和Flask-Migrate 组件

    4、Flask-SQLAlchemy:吧Flask和SQLAlchemy结合在一起,粘合剂
        在__init__.py 文件中
            1 引入Flask-SQLAlchemy    中的SQLAlchemy,实例化了一个SQLAlchemy对象
            2 注册Flask-SQLAlchemy:
                - 有两种方式
                    方式一: 在函数里面,SQLAlchemy(app)  #如果想在其他地方使用这种方式就不好使了
                    方式二: 在全局:
                        db = SQLAlchemy(),
                        在函数里面 db.init_app(app)  #调用init_app方法吧app放进去了
            3、导入models的类
            4、导入的类中继承了db.model,其实本质上还是继承了Base类
            5、manage.py 创建数据库表,可以通过命令来创建。借助Flask-Migrate组件来完成
    5、Flask-Migrate:
        -旧5 被毙掉了:在manage.py里面导入db,以后执行db.create_all()创建表,以后执行drop_all()删除表
          这样不好,我们可以和Flask-Migrate结合起来用
        -新5:Flask-Migrate
            - 安装组件:pip install Flask-Migrate
            - 5.1 导入    
                from flask_migrate import Migrate, MigrateCommand
                from app import db, app
            - 5.2 migrate = Migrate(app,db) #创建实例
            - 5.3 创建命令
                manager.add_command("db",MigrateCommand)
            - 5.4 执行命令
                python manage.py db init  #只执行第一次
                python manage.py db migrate
                python manage.py db upgrade
        在执行命令之前,得先连接数据库,他才会知道吧表放在那里,

    详说注册SQLAlchemy的两种方式

    方式一

    from flask_sqlalchemy import SQLAlchemy
    from flask import FLask
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 
        "mysql://root:12345@localhost/test"
    db = SQLAlchemy(app)

     方式二:

    from flask_sqlalchemy import SQLAlchemy
    from flask import FLask
    db = SQLAlchemy()
    
    def create_app():
        app = Flask(__name__)
        db.init_app(app)
        return app

    四、操作数据库

    通过上面注册了SQLAlchemy,就直接可以从db.session了

    #方式一
            db.session  #会自动创建一个session
            db.session.add()
            db.session.query(models.User.id,models.User.name).all()
            db.session.commit()
            db.session.remove()
        #方式二
            导入models
            models.User.query

    五、flask中所有用到过的组件

    所有用过的组件
        Flask
        连接数据库的两种操作
            要么DBUtils:用于执行原生SQL的
                用自己的util里面的sqlhelper来完成
            要么SQLAlchemy:遵循他自己的语法来链接
                方式一:SQLAlchemy(app)这种方式有局限性,如果我在其他地方也得用到呢?可以吧它写到全局
                方式二:优点,
                    实例化一下:db = SQLAlchemy()
                    注册:
                        在settings里面配置一下数据库链接方式
                            SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123@47.93.4.198:3306/s6?charset=utf8"
                            SQLALCHEMY_POOL_SIZE = 2
                            SQLALCHEMY_POOL_TIMEOUT = 30
                            SQLALCHEMY_POOL_RECYCLE = -1
                        Flask-SQLAlchemy: db.init_app(app)
                
        Flask-Session  #用于吧session保存在其他地方
        Flask-Script  #生成命令
        Flask-Migrate   #数据库迁移
        Flask-SQLAlchemy  #将Flask和SQLAlchemy很好的结合在一起
            #本质、:每次操作数据库就会自动创建一个session连接,完了自动关闭
        Blinker  #信号
        Wtforms  #FORM组件
        用到的组件和版本
            pip3 freeze  #获取环境中所有安装的模块
            pip3 freeze > a.txt
            pip3 freeze > requirements.txt
            #pip3 install pipreqs  #帮你找到当前程序的所有模块,并且自动生成 requirements.txt文件,写入内容
            pipreqs ./  #根目录
            
            以后别人给你一个程序,告知你一个文件夹需要安装的组件:requirements.txt
                 进入程序目录:
                    pip install -r requirements.txt #就会把设计到的所有的组件就会装上 
            
            结构:
                app
                    static
                    templates
                    views
                    __init__.py
                    models.py
  • 相关阅读:
    POJ 1611 The Suspects
    POJ 2001 Shortest Prefixes(字典树)
    HDU 1251 统计难题(字典树 裸题 链表做法)
    G++ C++之区别
    PAT 乙级 1013. 数素数 (20)
    PAT 乙级 1012. 数字分类 (20)
    PAT 乙级 1009. 说反话 (20)
    PAT 乙级 1008. 数组元素循环右移问题 (20)
    HDU 6063 17多校3 RXD and math(暴力打表题)
    HDU 6066 17多校3 RXD's date(超水题)
  • 原文地址:https://www.cnblogs.com/TheLand/p/9174658.html
Copyright © 2011-2022 走看看