tornado框架基础06-SQLAlchemy连接数据库
01 ORM
在服务器后台,数据是要存储在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办呢?是不是需要把所有的 SQL 语句都再重新写一遍呢?
和数据库相关,不同的数据库需要写不同的 SQL 语句
使用 ORM 隔离框架和数据库
ORM全称 Object Relational Mapping对象关系映射
通过 ORM 可以不用关心后台是使用的哪种数据库,只需要按照 ORM 所提供的语法规则去书写相应的代码, ORM 就会自动的转换成对应数据库的 SQL 语句 ,一个类对应一张一表.
02 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
这里是使用国内的源
第二步:导入模块
from sqlalchemy import create_engine
第三步:数据库数据
HOSTNAME = '127.0.0.1' #常量用大写
PORT = '3306'
DATABASE = 'mydb'
USERNAME = 'admin'
PASSWORD = 'pswd'
第四步:数据连接 URL
Db_Uri = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
第五步:连接数据库
engine = create_engine(Db_Uri)
第六步:测试连接
if __name__ == '__main__':
connection = engine.connect() result = connection.execute('select 1') print(result.fetchone())
03 Module
第一步:创建 Module 的 Base 类
新建一个base.py文件.
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
对象关系型映射,数据库中的表与python中的类相对应,创建的类必须继承自 sqlalchemy 中的基类。
使用 declarative 方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录。
应用通常只需要有一个 Base 的实例。我们通过 declarative_base() 功能创建一个基类。
第二步:创建 Module
新建一个user_module.py
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime,Boolean
from connect import Base
class User(Base):
--tablename-- = 'user'
id = Column(Integer,primary_key=True,autoincrement=True)
username = Column(String(20),nullable=False)
password = Column(String(50))
creatime = Column(DateTime,default=datetime.now)
update_time = Column(DateTime,default = datetime.now()
_locked = Colume(Boolean,default=False,nullable=False)
)
再次强调,我们用类来表示数据库里面的表!!!
这些表的类都继承于我们的Base基类。
在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段
第三步:启动 Module
Base.metadata.create_all()
执行此代码,就会把创建好的 Module 映射到数据库中
Module
--tablename--: 数据库中的表名
Column: 用来创建表中的字段的一个方法
Integer: 整形,映射到数据库中的int类型
String: 字符类型,映射到数据库中的varchar类型,使用时,需要提供一个字符长度
DateTime: 时间类型
通过 SQLAlchemy 提供的语法来声明表
04 增删改查
第一步:创建会话
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine) #传入引擎
session = Session()
在对表数据进行增删改查之前,先需要建立会话,建立会话之后才能进行操作,就类似于文件要打开之后才能对文件内容操作
add
person = User(username='buodng', password='qwe123')
session.add(person)
session.commit()
session.add_all([
User(username='tuple', password=2), User(username='which', password=3)
]) #加多条
add 是添加一条数据, add_all 添加多条数据
query
rows = session.query(User).all()
rows = session.query(User).first()
query 就是查询的意思,在 SQLAlchemy 中也用来查询数据
all 是查询所有的意思
first 是查询第一条数据
在后面会详细介绍更多的用法
update
rows = session.query(User).filter(User.username=='budong').update({User.password:1}) #修改值放到字典里面去.
session.commit()
update 用来更改数据
delete
rows = session.query(User).filter(User.username=='budong')[0]
#用filter查出来的是一条原生的SQL语句
print(rows)
session.delete(rows)
session.commit()
使用 delete 方法来删除数据
tornado框架基础06-SQLAlchemy连接数据库的更多相关文章
- tornado框架基础10-websocket
websocket 01 长轮询 在网页,我们经常扫码登录,结合之前的学习的知识点,来思考下,前端是如何知道用户在手机上扫码登录了呢? 长轮询:客户端不断的向服务器发送请求 缺点: \1. 开销大 \ ...
- tornado框架基础11-tornado异步
01 同步和异步 生活中常常会遇到在超市排队买东西的情况,排在你前面的人没有结算完成,你就无法付账,在计算机中也有类似的情形,一个程序在执行之前,需要等待其他的程序执行完成,大家还能举出其他的例子吗? ...
- tornado框架基础08-sqlalchemy表关系和简单登录注册
01 一对一表关系 Module 需要先创建对应的 Module ,这里采用之前建立好的 User 和 UserDetails relationship from sqlalchemy.orm imp ...
- tornado框架基础01-路由简介
tornado 小而精 Django 大而全 Web框架 Tornado是一个由Python开发的Web框架 Web服务 利用Tornado,可以快速搭建和一个高性能的Web服务 非阻塞 Tornad ...
- tornado框架基础09-cookie和session
01 cookie 在上节,我们简单了解了登录过程,但是很明显,每次都需要登录,但是在平常逛网站的只需要登录一次,那么网站是如何记录登录信息的呢? 有没有什么办法可以让浏览器记住登录信息,下次再次打开 ...
- tornado框架基础07-sqlalchemy查询
01 查询结果 上节使用query从数据库中查询到了结果,但是query返回的对象是直接可用的吗? 首先导入模块 from connect import session from user_modul ...
- tornado框架基础05-模板继承、UImodul和UImethods
01 模板继承 父模板 <html lang="en"> <head> <meta charset="UTF-8"> ...
- tornado框架基础04-模板基础
01 模板 模板演示 配置路径 在 application 中配置模板文件和静态文件的路径: template_path='templates', static_path='static', 模板 & ...
- tornado框架基础03-请求与响应
01 请求与响应 请求 浏览器在发送请求的时候,会发送具体的请求信息,由请求行,请求消息头,请求正文 请求消息头 向服务器传递附加信息 Accept: 浏览器可以接受的MIME类型. Accept-C ...
随机推荐
- 深度 Mybatis 3 源码分析(一)SqlSessionFactoryBuilder源码分析
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java ...
- vbox虚拟机配置Redhat6.4本地yum源
作为一个新手,配置这个yum源配了4天,遇到了各种问题,也按照网络上面一些方法在163上面下载CentOS6的yum源来替换Redhat本地的yum源,但是配置过程中,出现很多错误,发现直接在本地配置 ...
- [BZOJ5120]无限之环
Description 曾经有一款流行的游戏,叫做InfinityLoop,先来简单的介绍一下这个游戏: 游戏在一个n×m的网格状棋盘上进行,其中有些小方格中会有水管,水管可能在方格某些方向的边界的中 ...
- Hibernate通过实体对象对应数据库表信息
Hibernate通过实体对象对应数据库表信息,包括:数据库表名称.主键列名.非主键列名等. 获取对象映射缓存管理类: AbstractEntityPersister aep = (AbstractE ...
- oracle中的用户详解 【转】
oracle中的用户很多,也很令初学者费解.oracle中的帐户分为两类:一类是必需的帐户,一类是存储各种应用的帐户 用户名 密码 描述 ANONYMOUS ANONYMOUS 访问http的匿名 ...
- (023) 关于51单片机的A5指令
可看见一篇讲51单片机加密的文章这么讲: [加密方法:在A5后加一个二字节或三字节操作码,因为所有反汇编软件都不会反汇编A5指令,造成正常程序反汇编乱套,执行程序无问题仿制者就不能改变你的源程序.] ...
- POJ 1692 Crossed Matchings dp[][] 比较有意思的dp
http://poj.org/problem?id=1692 这题看完题后就觉得我肯定不会的了,但是题解却很好理解.- - ,做题阴影吗 所以我还是需要多思考. 题目是给定两个数组,要求找出最大匹配数 ...
- F. Anton and School 位运算 + 化简
http://codeforces.com/contest/734/problem/F 因为 x + y = (x & y) + (x | y) 有了这个公式后,然后应该手动模拟一下,把公式化 ...
- Object类的几个方法
1.protected Object clone()创建并返回此对象的一个副本. 2. boolean equals(Object obj)指示其他某个对象是否与此对象“相等”. 3. protect ...
- MyBatis使用懒加载mybatis-config.xml配置
在mybatis-config.xml添加如下配置 <settings> <!--要使延迟加载生效必须配置下面两个属性--> <setting name="la ...