SQLAlchemy Script

SQLAlchemy:

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

 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',

     }

    

2.scoped_session:

 from sqlalchemy.orm import sessionmaker

 from sqlalchemy import create_engine

 from sqlalchemy.orm import scoped_session

 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()

3.Flask-SQLAlchemy Flask-Migrate

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组件来完成

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

    在执行命令之前,得先连接数据库,他才会知道吧表放在那里,

from flask_sqlalchemy import SQLAlchemy

from flask import FLask

db = SQLAlchemy()

def create_app():

    app = Flask(__name__)

    db.init_app(app)

    return app

所有用过的组件

 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

转载于:https://www.cnblogs.com/mihon/p/8981031.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存文章汇总,并剖析mmap

在看这篇文章之前,可以先看看下面这几篇文章Linux内存,先看这篇文章Linux内存寻址方式Linux虚拟内存TLBLinux物理内存初始化Linux io内存存在的意义~修改cmdline 把内存改成512MB用mtrace定位内存泄漏什么是内存泄漏?Linux内存管理slub分配器…

[综述泛读] A survey on web services composition (IJWGS, 2005)

Time: 2.5 hours Dustdar S, Schreiner W. "A survey on web services composition." International Journal of Web and Grid Services: 1-30. 2005 (30 pages, 单栏) (gs:169) Schahram Dustdar (维也纳技术大学, full prof) Dusdar是Distributed Systems Group的老…

Spring 事务与脏读、不可重复读、幻读

索引: 目录索引 参看代码 GitHub: 1.Spring 事务 2.事务行为 一、Spring 事务: Spring 的事务机制是用统一的机制来处理不同数据访问技术的事务处理。 Spring 的事务机制提供了一个 PlatformTransactionManager 接口,不同的数据访问技术的事务…

韦老师的开发板和嵌入式书籍赠送

大家五一快乐!我知道这个时候大家都没有什么心思学习,所以找了联合了几个朋友一起给大家送点东西。这几个技术号主都非常用心的给大家分享技术文章,我相信,跟他们一起,你们也能变得更加优秀。奖品包括:1. 韦…

每日一题(2)—— -2与2的比较

分析下面的代码&#xff0c;求运行结果。 #include <stdio.h>int main(void) {if(-2 > 2){printf("11111\r\n");}else{printf("22222\r\n");}return 0; }分析&#xff1a; -2和2都没有声明存储类型&#xff0c;编译器默认按int存储&#xff0c;所…

正则表达式之道

正则表达式之道 原著&#xff1a;Steve Mansour smanscruznet.com Revised: June 5, 1999 (copied by jm /at/ jmason.org from , after the original disappeared! ) 翻译&#xff1a;Neo Lee neo.leegmail.com 2004年10月16日 英文版原文 译者按&#xff1a;原文因为年代久远…

truffle unbox react 出坑指南

最近几天差点就被这鬼东西给逼疯了&#xff0c;truffle init 、truffle unbox webpack 不管我怎么运行都是对的&#xff0c;唯独truffle unbox react 不管在哪个windows都会报错&#xff0c;换了好几台电脑&#xff0c;心都累完了&#xff0c;还好我坚持了下来&#xff0c;找了…

单片机6年想转嵌入式Linux ,不知如何下手?

刷知乎看到下面这个提问。单片机6年想转嵌入式Linux &#xff0c;不知如何下手&#xff1f;现在挺尴尬&#xff0c;做的单片机产品总是感觉重复重复再重复&#xff0c;想学习点新东西&#xff0c;不知道如何转。说实话&#xff0c;这个问题自己关注了很久。今天就借题主这个问题…

Visual Studio 2008在设计视图和代码视图切换的快捷键F7

使用VS2008的快捷键F7可以在设计器视图和代码视图进行切换&#xff0c;相当于“视图”菜单 ->“代码”&#xff08;或者“设计器”&#xff09;。在设计器视图可以按F7查看源代码&#xff0c;在代码视图可以按F7转到设计界面。 这是VS2008默认的键盘映射方案&#xff0c;…

每日一题(3)—— -2与2的比较(二)

分析下面的代码&#xff0c;求运行结果。 #include <stdio.h>int main(void) {if(-2L > 2UL){printf("11111\r\n");}else{printf("22222\r\n");}return 0; }分析&#xff1a; 常量后面接L表示long型存储&#xff0c;UL表示unsigned long型存储&a…

嵌入式技术面试时的10大潜规则

编排 | strongerHuang微信公众号 | 嵌入式专栏找工作也是一门技能&#xff0c;有的人很快就找到自己喜欢的工作&#xff0c;有的人找了很久也没找到合适的工作。下面给大家分享几点找工作过程中存在的“潜规则”内容。嵌入式专栏1面试的本质不是考试&#xff0c;而是告诉面试官…

Introducing the ClearGLASS App on ClearOS

<iframe width"890" height"500" src"https://www.youtube.com/embed/tTLnK7dgRIk" frameborder"0" allow"autoplay; encrypted-media" allowfullscreen></iframe> https://www.clearcenter.com 转载于:https:/…

系统为什么要分层?

在日常的软件开发当中&#xff0c;我们一般都是采用了分层的方式来架构系统&#xff0c;但是为什么我们需要分层进行架构呢&#xff1f;在此之前&#xff0c;我觉得需要 搞明白两个概念&#xff0c;什么是软件的伸缩性&#xff0c;什么是性能。首先&#xff0c;什么是软件的伸缩…

每日一题(4)—— (a ^ b 2)

分析下面的代码&#xff0c;求运算结果。 #include <stdio.h>int main(void) {int a 6, b 4;printf("%d\n", a ^ b << 2);return 0; }分析&#xff1a; 主要是考的是“优先级”和按位“异或”&#xff0c; 左移运算符优先级高于按位异或运算符&#…

轻轻的你来了,悄悄的你走了,邓总没有带走一个bug

写这篇文章的时候&#xff0c;比较晚&#xff0c;所以思绪是清晰的&#xff0c;这个时候刚好是邓总来公司跟我交接离职的最后一天。给邓总制作的告别MV&#xff1a;我跟邓总2017年12月在恒大认识&#xff0c;我们入职时间相差一周&#xff0c;我入职的时候就开始注意到旁边的这…

神奇的css3(2)动画

四、Css3 2D动画 1、2D 转换方法 函数 描述 matrix(n,n,n,n,n,n) 定义 2D 转换&#xff0c;使用六个值的矩阵。 translate(x,y) 定义 2D 转换&#xff0c;沿着 X 和 Y 轴移动元素。 translateX(n) 定义 2D 转换&#xff0c;沿着 X 轴移动元素。 translateY(n) 定义 2D…

固定宽度弹性布局(以适应各种各辨率)

最佳网页宽度及其实现——新手可了解一下 1.设计网页的时候&#xff0c;确定宽度是一件很苦恼的事。以minifun.cn为例&#xff0c;根据Google Analytics的统计&#xff0c;半年多以来&#xff0c;访问者的屏幕分辨率一共有81种。最小的分辨率是122x160&#xff0c;这应该是手机…

B站这套教程火了,火速搬运!限时删除~

最近好多粉丝给我留言&#xff0c;寻求人工智能入坑资源&#xff0c;想利用人工智能来实现一些大胆的想法、项目或创意&#xff0c;或是想进入AI行业搞钱。不过细聊之下&#xff0c;大部分伙伴苦于不知从何入手&#xff0c;找不到重点。更甚至被烧脑的算法劝退&#xff0c;折腾…

JAVA读写文件

JAVA读写文件 1 /**2 * 3 * Description: 写文件4 * param param url 要写到服务器的路径5 * param param fileName 要写的文件名 需要加前缀 如 .txt6 * param param bodydata 要写的内容 7 * param return 成功返回1 失败返回08 * r…

【MySQL学习笔记008】多表查询

1、多表关系 概述&#xff1a;项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上可分为三种&a…