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. Leetcode:Substring with Concatenation of All Words分析和实现

    题目大意是传入一个字符串s和一个字符串数组words,其中words中的所有字符串均等长.要在s中找所有的索引index,使得以s[index]为起始字符的长为words中字符串总长的s的子串是由wo ...

  2. javascript-文档结构遍历

    1.document.all document.all[0] //文档中第一个元素 document.all["navbar"] //id或name为"navbar&qu ...

  3. jQuery基础教程-第8章-002Adding jQuery object methods

    一.Object method context 1.We have seen that adding global functions requires extending the jQuery ob ...

  4. jQuery--加一行减一行

    效果: 知识点: 克隆--clone() 追加--append() 移除--remove() 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2 ...

  5. linux下安装sz/rz命令

    参考 https://blog.csdn.net/kobejayandy/article/details/13291655

  6. sqlServer通过指定的起始时间,创建该时间段内以年、月、日为时间段的临时表

    通过指定的起始时间,创建该时间段内以年.月.日为时间段的临时表 ALTER PROCEDURE [dbo].[YOUR_SP_Name]     -- Add the parameters for t ...

  7. Reportng 的测试报告在 Jenkins 中显示不全

    通过Jenkins执行接口测试生成测试报告,用Jenkins的web服务打开html显示不全. 环境: Jenkins版本:1.651.2 Jenkins发布在mac上面 使用的是testng管理测试 ...

  8. 浅析C语言中assert的用法(转)

    原文地址:http://www.jb51.net/article/39685.htm 以下是对C语言中assert的使用方法进行了介绍,需要的朋友可以参考下. assert宏的原型定义在<ass ...

  9. 【Java】对Map按key和value分别排序

    一.什么是Map? 在讲解Map排序之前,我们先来稍微了解下map. map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. ...

  10. maven的pom文件解析及配置

    1.IDEA中的Maven的pom.xml文件,其实比较通俗点介绍功能主要项目引入的jar包,管理配置项目以及一些插件的配置等项目 2.对于pom配置详细介绍,整理如下2篇文档介绍的比较系统全面: h ...