tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作

一、 ORM

#在服务器后台,数据是要储存在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办?是不是需要把所有的SQL语句在重新写一遍呢?

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

二、SQLAlchemy 连接数据库

#1、安装SQLAlchemy
pip install pymysql
pip install sqlalchemy
#2、导入模块
from sqlalchemy import create_engine
#3、数据库数据
HOSTNAME = '127.0.0.1'
PORT = ''
DATABASE = 'mydb'
USERNAME = 'admin'
PASSWORD = 'Root110qwe'
#4、创建数据库
mysql -u root -p qwe123 #进入mysql
create database `mydb`; #创建mydb数据库
select host,user from mysql.user; #查看host user
grant all on *.* to 'admin'@'%'; # 赋予权限
flush privileges; #刷新数据库

  python代码,这是在connect.py里面的代码

from sqlalchemy import  create_engine

HOSTNAME = '127.0.0.1'
PORT = ''
DATABASE = 'mydb'
USERNAME = 'admin'
PASSWORD = 'Root110qwe' Db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
USERNAME,
PASSWORD,
HOSTNAME,
PORT,
DATABASE
) engine = create_engine(Db_url) if __name__ == '__main__':
connetion = engine.connect()
result = connetion.execute('select 1')
print(result.fetchone())

三、创建module

#刚才已经使用SQLAlchemy连上数据库,现在该如何在数据库里面新建表呢?
#数据库里面的一张表代表python中的一个类
#第1步 创建Module的Base类,在connect.py里面添加

from sqlalchemy.ext.declarative import  declarative_base
Base = declarative_base(engine) #对象关系类映射,数据库中的表和python中的相对应,创建的类必须继承自sqlalchemy中的基类 #使用declarative方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录 #应用通常只需要有一个Base的实例。我们通过declarative_base() 功能创建一个基类。
#以后换数据库的时候,只需要改变数据库的上面的代码,如HOSTNAME等等,后面的user_modules都不需要改变
#第2步 创建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))
password = Column(String(50))
creatime = Column(DateTime,default=datetime.now)
_locked = Column(Boolean,default=False,nullable=False) def __repr__(self): #这一段可有可无
return """<User(id=%s)>
"""%(
self.id
) #我们用类来表示数据库里面的表!!! #这些表的类都继承于我们的Base基类 #在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段
#第3步 创建Module
if __name__ == '__main__':
Base.metadata.create_all() #执行此代码,就会把创建好的Module映射到数据库中
Module
__tablename__ = 'user' #数据库中的表名
id = Column(Integer,primary_key=True,autoincrement=True)#Column用来创建表中的字段的一个方法;整型,映射到数据库中的int类型;表内元素分别为主键和自动添加编号
username = Column(String(20)) #字符类型,映射到数据库中的varchar类型,需要提供一个字符长度
password = Column(String(50))
creatime = Column(DateTime,default=datetime.now) #时间类型
_locked = Column(Boolean,default=False,nullable=False) #表内元素分别表示默认和非空
#想要from connect import Base不报错(报错时是可以运行代码的)

#在data文件夹里面右键 选中Mark directory as 选中sources root

四、增删改查

#如何增删改查数据库里面的数据呢

#在connect.py里面输入一下代码

from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()
#再创建一个test_user_module.py用来实现增删改查
from connect import session #导入session
from user_modules import User #导入module def add_user(): #增
person = User(username='gaohuiqi',password='') #插入1条
#session.add(person)
session.add_all([
User(username='zhouzhou',password=''),
User(username='lala',password='')
]
)# 插入多条数据 session.commit() #刷入 def search_user():#查
rows = session.query(User).all() #查询所有
rows = session.query(User).first() #查询第一个
print(rows) def update_user():#改
rows = session.query(User).filter(User.username=='gaohuiqi').update({User.password:1})
session.commit() def delete_user():#删除
rows = session.query(User).filter(User.username=='gaohuiqi')[0]
print(rows)
session.delete(rows)
session.commit() if __name__=='__main__': #调用
# add_user()
# search_user()
# update_user()
delete_user()
#查
在查的时候如果出现一些内存地址而不是具体的表的数据,就需要在前面写上user_module.py里面写上repr(重写函数)

tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作的更多相关文章

  1. tornado 07 数据库—ORM—SQLAlchemy—查询

    tornado 07 数据库—ORM—SQLAlchemy—查询 引言 #上节课使用query从数据库查询到了结果,但是query返回的对象是直接可用的吗 #在query.py内输入一下内容 from ...

  2. 第二百八十九节,MySQL数据库-ORM之sqlalchemy模块操作数据库

    MySQL数据库-ORM之sqlalchemy模块操作数据库 sqlalchemy第三方模块 sqlalchemysqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API ...

  3. 【tips】ORM - SQLAlchemy操作MySQL数据库

    优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...

  4. tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册

    tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册 引言 #在数据库,所谓表关系,只是人为认为的添加上去的表与表之间的关系,只是逻辑上认为的关系,实际上数据库里面的表之间 ...

  5. Django学习笔记〇四——数据库ORM的使用(有待修改)

    Django框架基本上都是要和数据库结合使用的,我在以前讲过SQLAlchemy框架的使用,Django支持的不是SQLAlchemy,但是也内嵌了ORM框架,可以不需要直接面对数据库编程,而可以通过 ...

  6. LitepalNewDemo【开源数据库ORM框架-LitePal2.0.0版本的使用】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo使用的是LitePal2.0.0版本,对于旧项目如何升级到2.0.0版本,请阅读<赶快使用LitePal 2.0版本 ...

  7. python ORM - sqlalchemy 操作使用

    python操作数据库 使用 ORM - sqlalchemy,pymsql 安装: pip install pymsq pip install sqlalchemy 一. '''连接数据库'''   ...

  8. 二十九:数据库之SQLAlchemy连接数据库

    手写SQL复用性不高,SQL越复杂越容易出bug,而且容易引起SQL注入,所以现在Ibanez使用orm框架将数据库映射为数据模型,这是使用SQLAlchemy 准备工作,安装SQLAlchemy和P ...

  9. MySQL数据库06 /数据库总结

    MySQL数据库06 /数据库总结 目录 MySQL数据库06 /数据库总结 1. 数据库/DBMS 2. 数据库分类 3. 修改密码 4. 库操作 5. 表操作 6. 存储引擎 7. 事务 8. 约 ...

随机推荐

  1. Oracle 中 over() 函数

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  2. 【HDU5187】zhx's contest

    [问题描述] 作为史上最强的刷子之一,zhx的老师让他给学弟(mei)们出n道题.zhx认为第i道题的难度就是i.他想要让这些题目排列起来很漂亮. zhx认为一个漂亮的序列{ai}下列两个条件均需满足 ...

  3. 【bzoj1050】[HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2813  Solved: 1534[Submit][St ...

  4. Mask_RCNN训练模型初步测试结果

    调用训练的模型,加载测试集,发现测试效果并不理想,所以,需要调整训练参数,继续训练模型

  5. Tensorflow CPU mask-rcnn 训练模型

    基于cpu版的tensorflow ,使用mask_rcnn训练识别箱子的模型 代码参考(https://blog.csdn.net/disiwei1012/article/details/79928 ...

  6. 168. Excel Sheet Column Title 由数字返回excel的标题

    [抄题]: Given a positive integer, return its corresponding column title as appear in an Excel sheet. F ...

  7. python if __name__ == '__main__' 作用

    转载:https://stackoverflow.com/questions/419163/what-does-if-name-main-do When your script is run by p ...

  8. 二项分布 , 多项分布, 以及与之对应的beta分布和狄利克雷分布

    1. 二项分布与beta分布对应 2. 多项分布与狄利克雷分布对应 3. 二项分布是什么?n次bernuli试验服从 二项分布 二项分布是N次重复bernuli试验结果的分布. bernuli实验是什 ...

  9. SpringMVC——异常处理

    Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射.数据绑定以及目标方法执行时发生的异常. SpringMVC 提供的 Handl ...

  10. ios7 设置status bar风格

    How to change status bar style during launch on iOS 7 up vote4down votefavorite   When I launch my a ...