信号,flask-script,sqlalchemy 快速使用

1|0信号,flask-script,sqlalchemy 快速使用

2|0信号

# Flask框架中的信号基于blinker(安装这个模块),其主要就是让开发者可是在flask请求过程中定制一些用户行为 flask 和django都有 #观察者模式,又叫发布-订阅(Publish/Subscribe) 23 种设计模式之一 pip3.8 install blinker # 信号:signial 翻译过来的,并发编程中学过 信号量Semaphore
# 要在用户表中新增一条记录,该怎么做? -方案一:在每个增加后,都写一行代码 ---》后期要删除,比较麻烦 -方案二:使用信号,写一个函数,绑定内置信号,只要程序执行到这,就会执行这个函数
内置信号: request_started = _signals.signal('request-started') # 请求到来前执行 request_finished = _signals.signal('request-finished') # 请求结束后执行 before_render_template = _signals.signal('before-render-template') # 模板渲染前执行 template_rendered = _signals.signal('template-rendered') # 模板渲染后执行 got_request_exception = _signals.signal('got-request-exception') # 请求执行出现异常时执行 request_tearing_down = _signals.signal('request-tearing-down') # 请求执行完毕后自动执行(无论成功与否) appcontext_tearing_down = _signals.signal('appcontext-tearing-down')# 应用上下文执行完毕后自动执行(无论成功与否) appcontext_pushed = _signals.signal('appcontext-pushed') # 应用上下文push时执行 appcontext_popped = _signals.signal('appcontext-popped') # 应用上下文pop时执行 message_flashed = _signals.signal('message-flashed') # 调用flask在其中添加数据时,自动触发
信号的使用步骤: 1 写一个函数 2 绑定内置信号 3 等待被触发
# 自定义信号 # 1 定义出信号 session_set = _signals.signal('session_set') # 2 写一个函数 def test1(*args, **kwargs): print(args) print(kwargs) print('session设置值了') # 3 绑定自定义的信号 session_set.connect(test1) # 4 触发信号的执行(咱们做) session_set.send('xxx') # 触发信号执行 # django中使用信号,详细看这篇博客 https://www.cnblogs.com/liuqingzheng/articles/9803403.html

3|0django信号

Model signals pre_init # django的modal执行其构造方法前,自动触发 post_init # django的modal执行其构造方法后,自动触发 pre_save # django的modal对象保存前,自动触发 post_save # django的modal对象保存后,自动触发 pre_delete # django的modal对象删除前,自动触发 post_delete # django的modal对象删除后,自动触发 m2m_changed # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发 class_prepared # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发 Management signals pre_migrate # 执行migrate命令前,自动触发 post_migrate # 执行migrate命令后,自动触发 Request/response signals request_started # 请求到来前,自动触发 request_finished # 请求结束后,自动触发 got_request_exception # 请求异常后,自动触发 Database Wrappers connection_created # 创建数据库连接时,自动触发
# django中使用内置信号 1 写一个函数 def callBack(*args, **kwargs): print(args) print(kwargs) 2 绑定信号 #方式一 post_save.connect(callBack) # 方式二 from django.db.models.signals import pre_save from django.dispatch import receiver @receiver(pre_save) def my_callback(sender, **kwargs): print("对象创建成功") print(sender) print(kwargs) 3 等待触发

4|0flask-script

# django中,有命令 python manage.py runserver #flask启动项目,像djagno一样,通过命令启动 Flask==2.2.2 Flask_Script==2.0.3 #借助于:flask-script 实现 -安装:pip3.8 install flask-script -修改代码: from flask_script import Manager manager=Manager(app) manager.run() -用命令启动 python manage.py runserver # 自定制命令 #1 简单自定制命令 @manager.command def custom(arg): # 命令的代码,比如:初始化数据库, 有个excel表格,使用命令导入到mysql中 print(arg) #2 复杂一些的自定制命令 @manager.option('-n', '--name', dest='name') @manager.option('-u', '--url', dest='url') def cmd(name, url): # python run.py cmd -n lqz -u xxx # python run.py cmd --name lqz --url uuu print(name, url)

5|0sqlalchemy 快速使用

# 在flask中没有orm框架、对象关系映射,为了我们更方便的操作数据库,在fastapi中使用sqlalchemy居多 # SQLAlchemy是一个基于Python实现的orm框架。该框架建立在DB API之上,使用关系映射进行数据库操作, 大概来讲就是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果
# 安装 pip3.8 install sqlalchemy #了解 SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件 pymysql mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] cx_Oracle oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...] 更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html

6|0原生操作的快速使用

# 原生sql # 第一步:导入 from sqlalchemy import create_engine # 第二步:生成引擎对象 engine = create_engine( "mysql+pymysql://root@127.0.0.1:3306/cnblogs", max_overflow=0, # 超过连接池大小外最多创建的连接 pool_size=5, # 连接池大小 pool_timeout=30, # 池中没有线程最多等待的时间,否则报错 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) # 第三步:使用引擎获取连接,操作数据库 conn = engine.raw_connection() cursor=conn.cursor() cursor.execute('select * from aritcle') print(cursor.fetchall())

7|0创建操作数据表

# 第一步:导入 from sqlalchemy import create_engine import datetime from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index # 第二步:执行declarative_base,得到一个类 Base = declarative_base() # 第三步:继承生成的Base类 class User(Base): # 第四步:写字段 id = Column(Integer, primary_key=True) # 生成一列,类型是Integer,主键 name = Column(String(32), index=True, nullable=False) # name列varchar32,索引,不可为空 email = Column(String(32), unique=True) # datetime.datetime.now不能加括号,加了括号,以后永远是当前时间 ctime = Column(DateTime, default=datetime.datetime.now) # extra = Column(Text, nullable=True) # 第五步:写表名 如果不写以类名为表名 __tablename__ = 'users' # 数据库表名称 # 第六步:建立联合索引,联合唯一 __table_args__ = ( UniqueConstraint('id', 'name', name='uix_id_name'), # 联合唯一 Index('ix_id_name', 'name', 'email'), # 索引 ) class Book(Base): __tablename__ = 'books' id = Column(Integer, primary_key=True) name = Column(String(32)) # 第七步:把表同步到数据库中 # 不会创建库,只会创建表 engine = create_engine( "mysql+pymysql://root@127.0.0.1:3306/aaa", max_overflow=0, # 超过连接池大小外最多创建的连接 pool_size=5, # 连接池大小 pool_timeout=30, # 池中没有线程最多等待的时间,否则报错 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) # 把表同步到数据库 (把被Base管理的所有表,都创建到数据库) Base.metadata.create_all(engine) # 把所有表删除 # Base.metadata.drop_all(engine)

__EOF__

本文作者泡芙有点甜
本文链接https://www.cnblogs.com/zx0524/p/17298797.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小王应该在学习!  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示