美文网首页
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