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

一、 ORM

  1. #在服务器后台,数据是要储存在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办?是不是需要把所有的SQL语句在重新写一遍呢?
  2.  
  3. #用ORM隔离框架和数据库
  4. tornado ------> ORM -------> 数据库
  1. #ORM
  2. #全称:Object Relational Mapping 对象关系映射
  3. #通过ORM可以不用关心后台是使用的哪种数据库,只需要按照ORM所提供的语法规则去书写相应的代码,ORM就会自动地转换成对应数据库的SQL语句

二、SQLAlchemy 连接数据库

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

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

  1. from sqlalchemy import create_engine
  2.  
  3. HOSTNAME = '127.0.0.1'
  4. PORT = ''
  5. DATABASE = 'mydb'
  6. USERNAME = 'admin'
  7. PASSWORD = 'Root110qwe'
  8.  
  9. Db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
  10. USERNAME,
  11. PASSWORD,
  12. HOSTNAME,
  13. PORT,
  14. DATABASE
  15. )
  16.  
  17. engine = create_engine(Db_url)
  18.  
  19. if __name__ == '__main__':
  20. connetion = engine.connect()
  21. result = connetion.execute('select 1')
  22. print(result.fetchone())

三、创建module

  1. #刚才已经使用SQLAlchemy连上数据库,现在该如何在数据库里面新建表呢?
  1. #数据库里面的一张表代表python中的一个类
  1. #第1步 创建Module的Base类,在connect.py里面添加
  2.  
  3. from sqlalchemy.ext.declarative import declarative_base
  4. Base = declarative_base(engine)
  5.  
  6. #对象关系类映射,数据库中的表和python中的相对应,创建的类必须继承自sqlalchemy中的基类
  7.  
  8. #使用declarative方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录
  9.  
  10. #应用通常只需要有一个Base的实例。我们通过declarative_base() 功能创建一个基类。
  1. #以后换数据库的时候,只需要改变数据库的上面的代码,如HOSTNAME等等,后面的user_modules都不需要改变
  1. #第2步 创建Module 在user_module.py里面输入一下代码
  2. from datetime import datetime
  3. from sqlalchemy import Column,Integer,String,DateTime,Boolean
  4. from connect import Base
  5.  
  6. class User(Base):
  7. __tablename__ = 'user'
  8. id = Column(Integer,primary_key=True,autoincrement=True)
  9. username = Column(String(20))
  10. password = Column(String(50))
  11. creatime = Column(DateTime,default=datetime.now)
  12. _locked = Column(Boolean,default=False,nullable=False)
  13.  
  14. def __repr__(self): #这一段可有可无
  15. return """<User(id=%s)>
  16. """%(
  17. self.id
  18. )
  19.  
  20. #我们用类来表示数据库里面的表!!!
  21.  
  22. #这些表的类都继承于我们的Base基类
  23.  
  24. #在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段
  1. #第3步 创建Module
  2. if __name__ == '__main__':
  3. Base.metadata.create_all()
  4.  
  5. #执行此代码,就会把创建好的Module映射到数据库中
  1. Module
  2. __tablename__ = 'user' #数据库中的表名
  3. id = Column(Integer,primary_key=True,autoincrement=True)#Column用来创建表中的字段的一个方法;整型,映射到数据库中的int类型;表内元素分别为主键和自动添加编号
  4. username = Column(String(20)) #字符类型,映射到数据库中的varchar类型,需要提供一个字符长度
  5. password = Column(String(50))
  6. creatime = Column(DateTime,default=datetime.now) #时间类型
  7. _locked = Column(Boolean,default=False,nullable=False) #表内元素分别表示默认和非空
  1. #想要from connect import Base不报错(报错时是可以运行代码的)
  2.  
  3. #在data文件夹里面右键 选中Mark directory as 选中sources root

四、增删改查

  1. #如何增删改查数据库里面的数据呢
  2.  
  3. #在connect.py里面输入一下代码
  4.  
  5. from sqlalchemy.orm import sessionmaker
  6. Session = sessionmaker(engine)
  7. session = Session()
  1. #再创建一个test_user_module.py用来实现增删改查
  1. from connect import session #导入session
  2. from user_modules import User #导入module
  3.  
  4. def add_user(): #增
  5. person = User(username='gaohuiqi',password='') #插入1条
  6. #session.add(person)
  7. session.add_all([
  8. User(username='zhouzhou',password=''),
  9. User(username='lala',password='')
  10. ]
  11. )# 插入多条数据
  12.  
  13. session.commit() #刷入
  14.  
  15. def search_user():#查
  16. rows = session.query(User).all() #查询所有
  17. rows = session.query(User).first() #查询第一个
  18. print(rows)
  19.  
  20. def update_user():#改
  21. rows = session.query(User).filter(User.username=='gaohuiqi').update({User.password:1})
  22. session.commit()
  23.  
  24. def delete_user():#删除
  25. rows = session.query(User).filter(User.username=='gaohuiqi')[0]
  26. print(rows)
  27. session.delete(rows)
  28. session.commit()
  29.  
  30. if __name__=='__main__': #调用
  31. # add_user()
  32. # search_user()
  33. # update_user()
  34. delete_user()
  1. #查
  2. 在查的时候如果出现一些内存地址而不是具体的表的数据,就需要在前面写上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. ionic中隐藏header

    设置ion-view标签的hide-nav-bar属性为true <ion-view hide-nav-bar="true"> <ion-content> ...

  2. ubuntu18.04 按住只能删除一个字符bug

    只需要打开重复按键就可以了

  3. eclipse中代码里的黄色感叹号,怎么去掉?

    https://blog.csdn.net/Ideality_hunter/article/details/83007174

  4. 367. Valid Perfect Square判断是不是完全平方数

    [抄题]: Given a positive integer num, write a function which returns True if num is a perfect square e ...

  5. 复习action委托

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. poj 1988 Cube Stacking (并查集)

    题意:有N(N<=30,000)堆方块,开始每堆都是一个方块.方块编号1 – N. 有两种操作: M x y : 表示把方块x所在的堆,拿起来叠放到y所在的堆上. C x : 问方块x下面有多少 ...

  7. web端测试点汇总

    前言 前面一篇文章讲解了app测试一些功能点.那么相应的也梳理一下web测试相关的功能的测试点吧,此篇文章只是给你们一个思路,如果要涉及web端每个测试点,基本不可能实现的,所以只是提供一个设计的思路 ...

  8. iOS CocoaPods安装与使用 好东西保存

    http://www.cnblogs.com/daguo/p/4097263.html http://www.cnblogs.com/pican/p/3939941.html?utm_source=t ...

  9. Java 自定义异常类

    类1:public class LogicException extends RuntimeException {    //业务逻辑异常    /**     *      * @param mes ...

  10. OpenSSH/PuTTY/SSH使用

    OpenSSH/PuTTY/SSH 常用SSH服务指令 ① 启动SSH服务的命令 service sshd start ② 停止SSH服务的命令 service sshd stop ③ 重新启动SSH ...