SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

SQLAchemy下载

  1. pip3 install sqlalchemy

SQLAchemy使用

SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:

  1. MySQL-Python
  2. mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
  3.  
  4. pymysql
  5. mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
  6.  
  7. MySQL-Connector
  8. mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
  9.  
  10. cx_Oracle
  11. oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
  12.  
  13. 更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html
1、用sqlalchemy建表
  1. import sqlalchemy
  2. from sqlalchemy import create_engine
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from sqlalchemy import Column, Integer, String
  5.  
  6. # 连接方式 mysql+pymysql 用户名 root 密码 123456 主机 localhost 库 testdb encoding 字符集
  7. engine = create_engine("mysql+pymysql://root:123456@localhost/testdb",encoding='utf-8', echo=True)
  8.  
  9. Base = declarative_base() # 生成orm基类
  10.  
  11. class User(Base):
  12. __tablename__ = 'user' # 表名
  13. id = Column(Integer, primary_key=True)
  14. name = Column(String(32))
  15. password = Column(String(64))
  16.  
  17. Base.metadata.create_all(engine) # 创建表结构

如果数据库已经有了这个表了就不会创建了,也不会报错。

添加数据

先导入sessionmaker

  1. from sqlalchemy.orm import sessionmaker
  1. Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
  2. Session = Session_class() # 生成session实例 cursor
  3.  
  4. user_obj1 = User(name="alex", password="alex3714") # 生成你要创建的数据对象
    user_obj2 = User(name="jack", password="122") # 生成你要创建的数据对象
  5. print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None
  6.  
  7. Session.add(user_obj1) # 把要创建的数据对象添加到这个session里, 一会统一创建
    Session.add(user_obj2) # 把要创建的数据对象添加到这个session里, 一会统一创建
  8. print(user_obj.name, user_obj.id) # 此时也依然还没创建
  9.  
  10. Session.commit() # 现此才统一提交,创建数据

数据查询
  1. Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
  2. Session = Session_class() # 生成session实例 cursor
  3. data = Session.query(User).filter_by(name="alex").all() #filter_by 查出来的是一个列表
  4. print(data)

  1. data = Session.query(User).filter_by().all()

如果filter_by没有设置条件就把表中的数据都查出来了。

虽然是4条数据,但是完全看不懂,转换下数据显示格式。

在User类中添加一个方法:

  1. class User(Base):
  2. __tablename__ = 'user' # 表名
  3. id = Column(Integer, primary_key=True)
  4. name = Column(String(32))
  5. password = Column(String(64))
  6.  
  7. def __repr__(self): #添加的方法
  8. return "<%s name:%s>" % (self.id,self.name)

first() 取数据的第一条 , 没有last()方法

  1. data = Session.query(User).filter_by().first()
filter_by和filter的小区别

某些条件下用filter_by:

  1. data = Session.query(User).filter_by(id=2).all()

转成filter就要写成:

  1. data = Session.query(User).filter(User.id==2).all()

还有就是filter_by不能直接写 > <这种条件 要用filter。

  1. data = Session.query(User).filter(User.id>2).all()
多个条件
  1. data = Session.query(User).filter(User.id>2).filter(User.id<5).all()

修改数据

还是通过面向对象的方式修改。

  1. data = Session.query(User).filter(User.id>2).filter(User.id<5).first()
  2. print(data)
  3. data.name = 'Jack Liu'
  4. data.password = 'Shit happens'
  5. Session.commit()

原数据的name

回滚

原理和事务的回滚是一样的。

  1. my_user = Session.query(User).filter_by(id=1).first()
  2. my_user.name = "Jack"
  3.  
  4. fake_user = User(name='Rain', password='12345')
  5. Session.add(fake_user)
  6.  
  7. print(Session.query(User).filter(User.name.in_(['Jack', 'rain'])).all()) # 这时看session里有你刚添加和修改的数据
  8.  
  9. Session.rollback() # 此时你rollback一下
  10. print('after rollback')
  11. print(Session.query(User).filter(User.name.in_(['Jack', 'rain'])).all()) # 再查就发现刚才添加的数据没有了。

统计和分组

统计 count()

  1. Session.query(User).filter(User.name.in_(['Jack', 'rain'])).count()

分组

  1. from sqlalchemy import func
  2. Session.query(func.count(User.name),User.name).group_by(User.name).all()

第二种建表方式 不常用 了解即可
  1. from sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey
  2. from sqlalchemy.orm import mapper
  3.  
  4. metadata = MetaData()
  5. #表结构 通过Table创建表
  6. user = Table('user', metadata,
  7. Column('id', Integer, primary_key=True),
  8. Column('name', String(50)),
  9. Column('fullname', String(50)),
  10. Column('password', String(12))
  11. )
  12.  
  13. class User(object): #不继承Base 自定义类
  14. def __init__(self, name, fullname, password):
  15. self.name = name
  16. self.fullname = fullname
  17. self.password = password
  18.  
  19. mapper(User, user) #把这个类和表结果关联一下

python SQLAchemy常用语法的更多相关文章

  1. python MVC、MTV 框架介绍 Django 模板系统常用语法

    Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命 ...

  2. python yield from 语法

    python yield from 语法 yield语法比较简单, 教程也很多 , yield from的中文讲解很少 , python官网是这样解释的 PEP 380 adds the yield ...

  3. python字符串常用内置方法

    python字符串常用内置方法 定义: 字符串是一个有序的字符的集合,用与存储和表示基本的文本信息. python中引号中间包含的就是字符串. # s1='hello world' # s2=&quo ...

  4. 【转】python 历险记(四)— python 中常用的 json 操作

    [转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...

  5. python 历险记(四)— python 中常用的 json 操作

    目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...

  6. python 历险记(三)— python 的常用文件操作

    目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...

  7. python中常用的模块二

    一.序列化 指:在我们存储数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式,这个就是序列化, 不同的序列化结果不同,但目的是一样的,都是为了存储和传输. 一,pickle.可 ...

  8. 二. Python基础(2)--语法

    二. Python基础(2)--语法 1.实现一个简单的登录系统 '''# 形式1 n = 1 while n < 4:     name = input("请输入姓名\n" ...

  9. python关键的语法

    python关键的语法 1.标准类型分类

随机推荐

  1. post调试postman

    载地址:https://www.getpostman.com/ 教程地址:http://www.cnblogs.com/s380774061/p/4624326.html

  2. linux 安装python

    wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz #下载安装包 tar zxvf Python-3.6.0.tgz #解压 . ...

  3. 文献综述十七:基于 sql环境下超市管理系统的设计与实现

    一.基本信息 标题:基于 sql环境下超市管理系统的设计与实现 时间:2018 出版源:智能计算机与应用 文件分类:uml技术的研究 二.研究背景 从超市管理系统的实际应用出发,在系统分析过程中,从功 ...

  4. python 实现dns 解析发送接收报文

    http://www.qingruxu.com/code/python/851.html https://tools.ietf.org/html/rfc1035里面的图不一定正确,可以使用抓包软件来进 ...

  5. (转)MySQL open_files_limit相关设置

    http://www.cnblogs.com/zhoujinyi/archive/2013/01/31/2883433.html---------------------------MySQL ope ...

  6. Rails 中 mattr_accessor 一处文档错误

    http://xiewenwei.github.io/blog/2015/01/11/mattr-accessor-in-ruby-on-rails-activesupport/ module Hai ...

  7. Django级联删除的选项

    Django级联删除的选项 Django模型中的on_delete属性具有如下选项: CASCADE 级联删除,也就是被引用的实体被删除后,相关的记录信息都会被删除. PROTECT 阻止删除被引用的 ...

  8. php将“\\”转换成“\”的例子

    str_replace('\\\\', '\\', $url);

  9. MySQL优化--创建索引,以及怎样索引才会生效 (03)

    1. 创建索引 (看这里) 2.索引在什么情况下才会起作用(重点)

  10. nginx启动,停止,重启

    Nginx的启动.停止与重启   启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/ ...