tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作
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——基本内容及操作的更多相关文章
- tornado 07 数据库—ORM—SQLAlchemy—查询
tornado 07 数据库—ORM—SQLAlchemy—查询 引言 #上节课使用query从数据库查询到了结果,但是query返回的对象是直接可用的吗 #在query.py内输入一下内容 from ...
- 第二百八十九节,MySQL数据库-ORM之sqlalchemy模块操作数据库
MySQL数据库-ORM之sqlalchemy模块操作数据库 sqlalchemy第三方模块 sqlalchemysqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API ...
- 【tips】ORM - SQLAlchemy操作MySQL数据库
优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...
- tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册
tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册 引言 #在数据库,所谓表关系,只是人为认为的添加上去的表与表之间的关系,只是逻辑上认为的关系,实际上数据库里面的表之间 ...
- Django学习笔记〇四——数据库ORM的使用(有待修改)
Django框架基本上都是要和数据库结合使用的,我在以前讲过SQLAlchemy框架的使用,Django支持的不是SQLAlchemy,但是也内嵌了ORM框架,可以不需要直接面对数据库编程,而可以通过 ...
- LitepalNewDemo【开源数据库ORM框架-LitePal2.0.0版本的使用】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo使用的是LitePal2.0.0版本,对于旧项目如何升级到2.0.0版本,请阅读<赶快使用LitePal 2.0版本 ...
- python ORM - sqlalchemy 操作使用
python操作数据库 使用 ORM - sqlalchemy,pymsql 安装: pip install pymsq pip install sqlalchemy 一. '''连接数据库''' ...
- 二十九:数据库之SQLAlchemy连接数据库
手写SQL复用性不高,SQL越复杂越容易出bug,而且容易引起SQL注入,所以现在Ibanez使用orm框架将数据库映射为数据模型,这是使用SQLAlchemy 准备工作,安装SQLAlchemy和P ...
- MySQL数据库06 /数据库总结
MySQL数据库06 /数据库总结 目录 MySQL数据库06 /数据库总结 1. 数据库/DBMS 2. 数据库分类 3. 修改密码 4. 库操作 5. 表操作 6. 存储引擎 7. 事务 8. 约 ...
随机推荐
- ionic中隐藏header
设置ion-view标签的hide-nav-bar属性为true <ion-view hide-nav-bar="true"> <ion-content> ...
- ubuntu18.04 按住只能删除一个字符bug
只需要打开重复按键就可以了
- eclipse中代码里的黄色感叹号,怎么去掉?
https://blog.csdn.net/Ideality_hunter/article/details/83007174
- 367. Valid Perfect Square判断是不是完全平方数
[抄题]: Given a positive integer num, write a function which returns True if num is a perfect square e ...
- 复习action委托
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- poj 1988 Cube Stacking (并查集)
题意:有N(N<=30,000)堆方块,开始每堆都是一个方块.方块编号1 – N. 有两种操作: M x y : 表示把方块x所在的堆,拿起来叠放到y所在的堆上. C x : 问方块x下面有多少 ...
- web端测试点汇总
前言 前面一篇文章讲解了app测试一些功能点.那么相应的也梳理一下web测试相关的功能的测试点吧,此篇文章只是给你们一个思路,如果要涉及web端每个测试点,基本不可能实现的,所以只是提供一个设计的思路 ...
- iOS CocoaPods安装与使用 好东西保存
http://www.cnblogs.com/daguo/p/4097263.html http://www.cnblogs.com/pican/p/3939941.html?utm_source=t ...
- Java 自定义异常类
类1:public class LogicException extends RuntimeException { //业务逻辑异常 /** * * @param mes ...
- OpenSSH/PuTTY/SSH使用
OpenSSH/PuTTY/SSH 常用SSH服务指令 ① 启动SSH服务的命令 service sshd start ② 停止SSH服务的命令 service sshd stop ③ 重新启动SSH ...