tornado的ORM


  • 安装sqlalchemy和pymysql

    • pip install sqlalchemy
    • pip install pymysql
  • 连接数据库
    •  from sqlalchemy import create_engine
      
       config = {
      'HOST': '',
      'USERNAME': '',
      'PASSWORD': '',
      'PORT': '',
      'DATABASE': '',
      'PARAMS': ''
      } DB_URL = 'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}?{PARAMS}' engine = create_engine(DB_URL.format(**config)) if __name__ == '__main__':
      conc = engine.connect()
      result = conc.execute('select 1')
      print(result.fetchone())

      如果连接成功,则控制台会出现(1,)的结果


  • 数据库建模
    • 建立base类

       from sqlalchemy import create_engine
      from sqlalchemy.ext.declarative import declarative_base config = {
      'HOST': '',
      'USERNAME': '',
      'PASSWORD': '',
      'PORT': '',
      'DATABASE': '',
      'PARAMS': ''
      } DB_URL = 'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}?{PARAMS}' engine = create_engine(DB_URL.format(**config)) Base = declarative_base(engine)
    • 使用base类并建立表格
       from settings import Base
      from sqlalchemy import Column, Integer, String, DateTime, Boolean
      from datetime import datetime class User(Base):
      __tablename__ = 'user' # 指定表名
      id = Column(Integer, autoincrement=True, primary_key=True)
      username = Column(String(20))
      password = Column(String(20))
      create_time = Column(DateTime, default=datetime.now())
      is_login = Column(Boolean, default=False, nullable=False) if __name__ == '__main__':
      Base.metadata.create_all() # 创建表格

      创建的表名必须为该类的__tablename__属性,Colum新建一个字段,然后给Colum传参来进行约束

    • Column的常用参数:
      • default: 默认值,可以传一个函数体,default的值等于这个函数体执行后返回的值
      • nullable:是否可为空
      • primary_key:是否为主键
      • unique: 是否唯一
      • autoincrement: 是否自增长
      • onupdate: 更新的时候执行的函数,和default一样,可以传一个函数体
      • name: 该属性在数据库中的字段的映射,默认是属性名
    • 常用的数据类型
      • Integer: 整形
      • Float: 浮点类型
      • Boolean:布尔
      • DECIMAL: 定点类型: DECIMAL第一个参数为整数位的个数,第二位参数为小数位的个数
      • Enum:枚举类型: Enum可以借助python3自带的enum包来实现更加简便
      • Date: 传递datetime.date()
      • DateTime: 传递datetime.datetime()
      • Time:传递datetime.time() 进去
      • String: 字符串型, 使用时需要制定长度
      • Text: 文本类型
      • LONGTEXT: 长文本类型
  • 简单的增删改查
      •  from sqlalchemy import create_engine
        from settings import DB_CONFIG
        from sqlalchemy.ext.declarative import declarative_base
        from sqlalchemy.orm import sessionmaker DB_URL = 'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}?{PARAMS}' engine = create_engine(DB_URL.format(**DB_CONFIG)) Base = declarative_base(engine) Session = sessionmaker(engine) session = Session()

        与上面不同的是,新建了一个Session对象,然后将这个对象实例化,接下来的数据库操作都用到这个实例对象来操作

      •  from config import Base
        from sqlalchemy import Column, Integer, String, DateTime, Boolean
        from datetime import datetime class User(Base):
        __tablename__ = 'user'
        id = Column(Integer, primary_key=True, autoincrement=True)
        username = Column(String(20))
        password = Column(String(20))
        create_time = Column(DateTime, default=datetime.now())
        is_login = Column(Boolean, default=False, nullable=False)

        表结构

      •  from wechat import User
        from config import session def add():
        user = User(username='ivy', password='')
        session.add(user)
        session.commit() if __name__ == '__main__':
        add()

        添加一条

      •  from wechat import User
        from config import session def add(): session.add_all([
        User(username='ivy', password=''),
        User(username='ivy1', password=''),
        User(username='ivy2', password=''),
        ])
        session.commit() if __name__ == '__main__':
        add()

        添加多条

      •  from wechat import User
        from config import session def search():
        session.query(User).all() # 查找所有
        result = session.query(User).first().username # 查找第一个
        result = session.query(User).filter(User.username=='ivy').first().password
        print(result) if __name__ == '__main__':
        search()
      •  from wechat import User
        from config import session def update():
        session.query(User).filter(User.username == 'ivy').update(
        {
        User.username: 'bob',
        User.password: '',
        }
        )
        session.commit() if __name__ == '__main__':
        update()

        更改的数据以字典的键值对的形式传入

      •  from wechat import User
        from config import session def delete():
        result = session.query(User).filter(User.username == 'bob').first() session.delete(result)
        session.commit() if __name__ == '__main__':
        delete()

        先查询结果,再讲查询的结果删除,如果查询的结果为空,则删除会报错。

    •  每个session执行完毕之后都要close()

tornado的ORM的更多相关文章

  1. Tornado + Bootstrap 快速搭建自己的web应用

    前言 最近用 python tordado 框架, 整了一个模板页面, 用于接入与发布数据的展示, tornado 简单易用, bootstrap 比较流行, 用起来也省事, 配合起来做些小案例非常迅 ...

  2. tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作

    tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作 一. ORM #在服务器后台,数据是要储存在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办?是不 ...

  3. tornado 07 数据库—ORM—SQLAlchemy—查询

    tornado 07 数据库—ORM—SQLAlchemy—查询 引言 #上节课使用query从数据库查询到了结果,但是query返回的对象是直接可用的吗 #在query.py内输入一下内容 from ...

  4. tornado+sqlalchemy+celery,数据库连接消耗在哪里

    随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知.     最近老是发现数据库的连接数如果 ...

  5. 浅谈tornado项目应用设计

    一.预备知识 最近开始尝试做一些tornado商城项目,在开始之前需要引入一些项目设计知识,如接口,抽象方法抽象类,组合,程序设计原则等,个人理解项目的合理设计可增加其灵活性,降低数据之间的耦合性,提 ...

  6. Tornado实战项目(伪JD商城)

    预备知识 在之前tornado商城项目中,在开始之前需要引入一些项目设计知识,如接口,抽象方法抽象类,组合,程序设计原则等,个人理解项目的合理设计可增加其灵活性, 降低数据之间的耦合性,提高稳定性,下 ...

  7. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  8. tornado 学习笔记2 Python web主流框架

    2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...

  9. Tornado sqlalchemy

    上篇文章提到了,最近在用 Python 做一个网站.除了 Tornado ,主要还用到了 SQLAlchemy.这篇就是介绍我在使用 SQLAlchemy 的过程中,学到的一些知识. 首先说下,由于最 ...

随机推荐

  1. OFD电子证照模版制作工具 --(采用wpf开发)

    前言  ofd应用的范围非常广,电子证照是其中非常重要的一个应用.同一类电子证照具有相同的板式.元数据:所以电子证照非常适合用模版来制作.模版就是板式样式固定,每个具体的证照只是文字或图片内容不同.比 ...

  2. Spring教程检视阅读

    Spring教程检视阅读 地址 可供参考的教程 <菜鸟学 SSH> <Spring Boot 那些事> <初识 Spring Security> <Sprin ...

  3. 死磕Lambda表达式(三):更简洁的Lambda

    我们都是阴沟里的虫子,但总还是得有人仰望星空.--<三体> 在之前的文章中介绍了Lambda表达式的基本语法和正确使用姿势,这次我来介绍一些Lambda更简洁的用法. 欢迎关注微信公众号: ...

  4. LeetCode43,一题让你学会高精度算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode系列第22篇文章,今天讲的内容是高精度算法. 今天和大家讨论的算法是高精度,对应的LeetCode是第43题.题面其实 ...

  5. 计算广告中的CPM和eCPM

    计算广告中的CPM和eCPM CPM和eCPM分别是什么? CPM(Cost per Mille ) : 千次展示付费.是针对广告主说的,你要花多少钱,购买一千次广告展示的机会.类似的还有CPC (C ...

  6. 第十二周java实验作业

    实验十二  图形程序设计 实验时间 2018-11-14 1.实验目的与要求 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: Java的集合框架实现了对各种数据结构的封装. jav ...

  7. wr720n v4 折腾笔记(四):安装inode客户端njitclient

    前记: 既然折腾到这里,那就不怕再折腾一下了,之前说过最终还是安装南浦月大神的固件,折腾了一圈,怎么不直接在官方界面上安装呢,这里给出直接安装的方法,就是修改固件头为wr720nv4. 0x01 修改 ...

  8. 快速排序-无序数组K小元素

    13:07:382020-03-10 11:16:13 问题描述: 找到一个无序数组中第K小的数 样例 1: 输入: [3, 4, 1, 2, 5], k = 3 输出: 3 样例 2: 输入: [1 ...

  9. 如何让Docker镜像飞起来

    前言 Docker用起来非常爽,尤其是用于DevOps实践时.但是,当你在国内或者本地拉取镜像时,经常会碰到各种“便秘”——要么镜像拉取缓慢,要么时断时连,要么连接超时! 当我们的镜像又比较大时(比如 ...

  10. 用python实现矩阵转置,python3 中zip()函数

    前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...