美文网首页
Tornado中使用 SQLAlchemy连接数据库(十二)

Tornado中使用 SQLAlchemy连接数据库(十二)

作者: 梦捷者 | 来源:发表于2020-04-15 08:57 被阅读0次

    一、ORM

    1、注意:由于在服务器后台,数据是要存储在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,所以我们用ORM来进行操作。

    2、ORM的简介

    • ORM全称 Object Relational Mapping对象关系映射。
    • 通过 ORM 可以不用关心后台是使用的哪种数据库,只需要按照 ORM 所提供的语法规则去书写相应的代码, ORM 就会自动的转换成对应对应数据库的 SQL 语句。

    二、SQLAlchemy连接数据库

    1、SQLAlchemy 是 python 中常用的 ORM工具

    2、查看mysql的进程是否在运行

    ps -ef|grep mysqld
    

    还有看是否能够连接数据库就行。。。。。

    3、SQLAlchemy操作的相应步骤(在db.py模块中)

    • 第一步:安装
      (1)安装: mysql
      (2)安装python包: pymysql(连接和操作数据库的接口)、sqlalchemy

      #使用国外源
      pip install pymysql
      pip install  sqlalchemy
      #使用国内源
      pip install -i https://pypi.douban.com/simple pymysql
      pip install -i https://pypi.douban.com/simple sqlalchemy
      
    • 第二步:导入模块

    from sqlalchemy import create_engine
    
    • 第三步:数据库数据信息
    HOSTNAME = '127.0.0.1' 
    PORT = '3306' 
    DATABASE = 'mydb' 
    USERNAME = 'admin' 
    PASSWORD = 'Root110qwe'
    
    • 第四步:添加数据连接的URL
    from sqlalchemy import create_engine
    
    HOSTNAME = '192.168.212.131'
    PORT = '3306'
    DATABASE = 'mydb'
    USERNAME = 'admin'
    PASSWORD = 'Root110qwe'
    
    Db_Uri = 'mysql+pymysql://{}:{}@{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, DATABASE)
    print(Db_Uri)
    
    • 第五步:在上一步的基础上进行连接数据库
    engine = create_engine(Db_Uri)
    
    • 第六步:在上一步的基础上进行测试连接(测试之前必须先创建相应的数据库)
    if __name__ == '__main__':
        connection = engine.connect()
        res = connection.execute('select 1')
        print(res.fetchone())
    

    三、Model的应用

    问题:刚才已经使用 SQLAlchemy 连上数据库,现在该如何在数据库里面新建表呢?

    1、通过模型使用ORM来建立表,步骤如下:

    • 第一步:创建 Model的 Base 类(在db.py中创建)
    from sqlalchemy.ext.declarative import declarative_base 
    Base = declarative_base(engine)
    

    (1)对象关系型映射,数据库中的表与python中的类相对应,创建的类必须继承自 sqlalchemy 中的基类。
    (2)使用 declarative 方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录。
    (3)应用通常只需要有一个 Base 的实例。我们通过 declarative_base() 功能创建一个基类。

    • 第二步:创建Model(在auth.py中编写)
    from datetime import datetime
    from sqlalchemy import Column, Integer, String, DateTime
    from models.db import Base
    
    class User(Base):
        __tablename__ = 'user'
        id = Column(Integer,primary_key=True,autoincrement=True)
        username = Column(String(50),unique=True,nullable=False)
        password = Column(String(50))
        creatime = Column(DateTime,default=datetime.now)
    

    注意:
    我们用类来表示数据库里面的表!!! 这些表的类都继承于我们的Base基类。 在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段.

    • 第三步:创建 Model
    Base.metadata.create_all()  # 执行此代码,就会把创建好的 Modle映射到数据库中
    

    2、model中的常用属性介绍(通过SQLAlchemy提供的语法来声明表)

    • __tablename__: 数据库中的表名(必须要有,左右两边是两个下划线)
    • Column: 用来创建表中的字段的一个方法
    • Integer: 整形,映射到数据库中的int类型
    • String: 字符类型,映射到数据库中的varchar类型,使用时,需要提供一个字符长度
    • DateTime: 时间类型

    四、增删查改的应用

    1、对数据库表中的数据操作

    • 第一步:创建会话(放在db.py文件中进行)
    from sqlalchemy.orm import sessionmaker
    Session = sessionmaker(engine)
    session = Session()
    

    注意:
    在对表数据进行增删改查之前,先需要建立会话,建立会话之后才能进行操作,就类似于文件要打开之后才能对文件内容操作。

    • 第二步:进行add操作

    (1)add 是添加一条数据

    person = User(username=‘budong', password='qwe123')
    session.add(person)
    
    

    (2)add_all是添加多条数据

    session.add_all([User(username='tuple', password='2'),  User(username='which', password='3')])
    session.commit()
    
    • 第三步:进行query操作
    rows = session.query(User).all()
    rows = session.query(User).first()
    

    query 就是查询的意思,在 SQLAlchemy 中也用来查询数据:
    all 是查询所有的意思
    first 是查询第一条数据

    rows1 = session.query(User).all()
    print(rows1)
    print("=="*8)
    rows2 = session.query(User).first()
    print(rows2)
    print("=="*8)
    rows3 = session.query(User.id, User.username, User.password, User.creatime).all()
    print(rows3)
    print("=="*8)
    rows4 = session.query(User.username).filter(User.creatime == datetime.datetime(2019, 9, 24, 14, 32, 39)).all()
    print(rows4)
    print("=="*8)
    rows4 = session.query(User.username).filter(User.creatime == datetime.datetime(2019, 9, 24, 14, 32, 39), User.password == '123').all()
    print(rows4)
    
    • 第四步:进行update操作
      update方法用来更改数据
    rows = session.query(User).filter(User.username=='小龙').update({User.password:1})
    session.commit()
    
    • 第五步:进行delete操作

    delete方法用来进行删除数据

    rows = session.query(User).filter(User.username=='小龙')[0]
    print(rows)
    session.delete(rows)
    session.commit()
    

    相关文章

      网友评论

          本文标题:Tornado中使用 SQLAlchemy连接数据库(十二)

          本文链接:https://www.haomeiwen.com/subject/rxgvuctx.html