• tornado的ORM


    tornado的ORM


    • 安装sqlalchemy和pymysql
      • pip install sqlalchemy
      • pip install pymysql
    • 连接数据库
      •  1 from sqlalchemy import create_engine
         2 
         3 
         4 
         5 config = {
         6     'HOST': '',
         7     'USERNAME': '',
         8     'PASSWORD': '',
         9     'PORT': '',
        10     'DATABASE': '',
        11     'PARAMS': ''
        12 }
        13 
        14 
        15 DB_URL = 'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}?{PARAMS}'
        16 
        17 engine = create_engine(DB_URL.format(**config))
        18 
        19 
        20 
        21 if __name__ == '__main__':
        22     conc = engine.connect()
        23     result = conc.execute('select 1')
        24     print(result.fetchone())

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


    • 数据库建模
      • 建立base类
         1 from sqlalchemy import create_engine
         2 from sqlalchemy.ext.declarative import declarative_base
         3 
         4 
         5 config = {
         6     'HOST': '',
         7     'USERNAME': '',
         8     'PASSWORD': '',
         9     'PORT': '',
        10     'DATABASE': '',
        11     'PARAMS': ''
        12 }
        13 
        14 
        15 DB_URL = 'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}?{PARAMS}'
        16 
        17 engine = create_engine(DB_URL.format(**config))
        18 
        19 Base = declarative_base(engine)
      • 使用base类并建立表格
         1 from settings import Base
         2 from sqlalchemy import Column, Integer, String, DateTime, Boolean
         3 from datetime import datetime
         4 
         5 
         6 class User(Base):
         7     __tablename__ = 'user'  # 指定表名
         8     id = Column(Integer, autoincrement=True, primary_key=True)
         9     username = Column(String(20))
        10     password = Column(String(20))
        11     create_time = Column(DateTime, default=datetime.now())
        12     is_login = Column(Boolean, default=False, nullable=False)
        13 
        14 
        15 
        16 
        17 if __name__ == '__main__':
        18     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: 长文本类型
    • 简单的增删改查
        •  1 from sqlalchemy import create_engine
           2 from settings import DB_CONFIG
           3 from sqlalchemy.ext.declarative import declarative_base
           4 from sqlalchemy.orm import sessionmaker
           5 
           6 
           7 DB_URL = 'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}?{PARAMS}'
           8 
           9 engine = create_engine(DB_URL.format(**DB_CONFIG))
          10 
          11 Base = declarative_base(engine)
          12 
          13 Session = sessionmaker(engine)
          14 
          15 session = Session()

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

        •  1 from config import Base
           2 from sqlalchemy import Column, Integer, String, DateTime, Boolean
           3 from datetime import datetime
           4 
           5 class User(Base):
           6     __tablename__ = 'user'
           7     id = Column(Integer, primary_key=True, autoincrement=True)
           8     username = Column(String(20))
           9     password = Column(String(20))
          10     create_time = Column(DateTime, default=datetime.now())
          11     is_login = Column(Boolean, default=False, nullable=False)
          12 
          13

          表结构

        •  1 from wechat import User
           2 from config import session
           3 
           4 def add():
           5     user = User(username='ivy', password='123456')
           6     session.add(user)
           7     session.commit()
           8 
           9 
          10 if __name__ == '__main__':
          11     add()

          添加一条

        •  1 from wechat import User
           2 from config import session
           3 
           4 def add():
           5 
           6     session.add_all([
           7         User(username='ivy', password='123456'),
           8         User(username='ivy1', password='123456'),
           9         User(username='ivy2', password='123456'),
          10     ])
          11     session.commit()
          12 
          13 
          14 if __name__ == '__main__':
          15     add()

          添加多条

        •  1 from wechat import User
           2 from config import session
           3 
           4 def search():
           5     session.query(User).all()  # 查找所有
           6     result = session.query(User).first().username  # 查找第一个
           7     result = session.query(User).filter(User.username=='ivy').first().password
           8     print(result)
           9 
          10 
          11 
          12 if __name__ == '__main__':
          13     search()
        •  1 from wechat import User
           2 from config import session
           3 
           4 
           5 def update():
           6     session.query(User).filter(User.username == 'ivy').update(
           7         {
           8             User.username: 'bob',
           9             User.password: '123654',
          10         }
          11     )
          12     session.commit()
          13 
          14 
          15 if __name__ == '__main__':
          16     update()

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

        •  1 from wechat import User
           2 from config import session
           3 
           4 
           5 def delete():
           6     result = session.query(User).filter(User.username == 'bob').first()
           7 
           8     session.delete(result)
           9     session.commit()
          10 
          11 
          12 if __name__ == '__main__':
          13     delete()

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

      •  每个session执行完毕之后都要close()
  • 相关阅读:
    HTML
    HTML协议
    索引原理与慢查询优化
    事务,存储过程
    视图,触发器
    Mysql之单表查询
    剑指offer 面试题4:二维数组中的查找
    剑指offer 面试题3:数组中重复的数字
    剑指offer 面试题2:实现Singleton模式
    剑指offer 面试题1:赋值运算符函数
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/10820896.html
Copyright © 2020-2023  润新知