tornado之ORM框架基础与操作

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

  1. SQLAlchemy连接数据库
    第一步:安装
    安装: mysql
    安装python包: pymysql、sqlalchemy
    pip安装 python 包
    pip install -i https://pypi.douban.com/simple pymysql
    pip install -i https://pypi.douban.com/simple sqlalchemy
    这里是使用国内的源
  2. 第二步:导入模块、建立数据库模块、数据库 URL、连接数据库、测试连接是否OK
from sqlalchemy import create_engine
  • 第三步:数据库连接

connect.py

#导入create_engine 的模块
from sqlalchemy import create_engine
#数据库模块
HOSTNAME = '127.0.0.1'    
PORT = '3306' #注意这个不是本地端口是指远程数据库端口,因为pycharm已经先SSH连接到本地了
DATABASE = 'mydb'   #linux已经存在的database,没有的话自己创建
USERNAME = 'admin'
PASSWORD = 'Root110qwe'
#数据连接 URL
Db_Uri = 'mysql+pymysql://{}:{}@{}/{}?charset=utf8'.format(
    USERNAME,
    PASSWORD,
    HOSTNAME,
    DATABASE,
)
#连接数据库
engine = create_engine(Db_Uri)

#创建一个基类
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)

#创建会话
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()

#测试连接是否OK
if __name__=="__main__":
    conection = engine.connect()
    result = conection.execute('select 1')
    print(result.fetchone())
  • 刚才已经使用 SQLAlchemy 连上数据库,现在该如何在数据库里面新建表呢?
  • 第一步:创建 Module 的 Base 类,上面已经创建了基类
#创建一个基类
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)

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

  • 第二步:创建 Module
    user_modules.py
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Boolean
from data.connect import Base
#通过 SQLAlchemy  提供的语法来声明User表,为了测试我修改为test表
class User(Base):
    __tablename__ = 'test'
    id = Column(Integer,primary_key=True,autoincrement=True)
    username = Column(String(20),nullable=False)
    password = Column(String(50))
    creatime = Column(DateTime,default=datetime.now)
    # _locked = Column(Boolean, default=False, nullable=False)

# __tablename__: 数据库中的表名
# Column:    用来创建表中的字段的一个方法
# Integer:   整形,映射到数据库中的int类型
# String:  字符类型,映射到数据库中的varchar类型,使用时,需要提供一个字符长度
# DateTime: 时间类型
    def __repr__(self):
        return """
            <User(id:%s, username:%s, password:%s, creatime:%s)>
        """ % (
            self.id,
            self.username,
            self.password,
            self.creatime
        )


if __name__ =="__main__":
    #执行此代码,就会把创建好的 Module 映射到数据库中
    Base.metadata.create_all()

再次强调,我们用类来表示数据库里面的表!!!

这些表的类都继承于我们的Base基类。

在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段

  • 增删改查
    现在万事具备,只需要往表中进行数据的更改即可,那改如何操作呢?

  • 第一步:创建会话
    在对表数据进行增删改查之前,先需要建立会话,建立会话之后才能进行操作,就类似于文件要打开之后才能对文件内容操作
    在上面的connect.py我事先创建好了

#创建会话
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()
  • 创建test_modules.py实现增删改查方法
from data.connect import session
from data.user_modules import User

def add_user():
    # person = User(username='test1',password ='qwe123')
    # session.add(person)      #add 是添加一条数据, add_all 添加多条数据
    persons = [
        User(username='tuple', password='qwe123'),
        User(username='list', password='qwe123'),
        User(username='os', password='qwe123'),
    ]
    session.add_all(persons)    #  add_all 添加多条数据
    session.commit()

def search_user():
    # rows = session.query(User).all()
    rows = session.query(User).first()
    print(rows)

def updata_user():
    rows = session.query(User).filter(User.username == 'os').update({User.password: 1})
    session.commit()

def delect_user():
    rows = session.query(User).filter(User.username == 'list')[0]
    print(rows)
    session.delete(rows)
    session.commit()


if __name__ =='__main__':
    # add_user()
    search_user()
    updata_user()
    delect_user()

query 就是查询的意思,在 SQLAlchemy 中也用来查询数据
all 是查询所有的意思
first 是查询第一条数据
看完之后需要掌握下面的操作

ORM 概念、连接 数据库、创建 Module、创建会话基本的增删改查

PS:
注意:想要from connect import Base不报错(报错时是可以运行代码的) 在data文件夹里面右键 选中Mark directory as 选中sources root

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章