SQLAlchemy(1)

目录

SQLAlchemy

1.简介

2.什么是ORM

3.开启MySQL的查询日志

4.SQLAlchemy与数据库的逻辑对应

5.连接数据库

6.创建会话Session

7.创建映射(Model)

1.Column的数据类型

2.Column列级别约束

3.表级别约束

8.单表操作

1.表的操作-增(insert into)

2.表的操作-删(delete)

3.表的操作-改(update)

4.表的操作-查(select)

1.基本查询

2.查询时的where子句

3.查询返回的列表(多个实例)以及标量(一个实例)

4.聚合查询

9.事务回滚

10.外键约束

 11.基本关系模式

1.一对多

2.一对多双向关系

3.一对一关系

4.多对多关系-中间表无意义

5.多对多关系-中间表有意义

12.双向关系中数据的查询和添加

13.cascade级联

1.一对多模式中relationship的影响

2.relationshipcascade参数设置

14.relationship中使用order_by排序

1.简介

SQLAlchemy是和很多数据库进行交互的一个库,它支持Postgresql,mysql,oracle,Ms-sql 等等主流的数据库库.虽然各个厂家的数据库使用SQL 语言不同,但是SQLAlchemy 在底层封装了他们,可以使用一套标准来操作数据库.

SQLAlchemy 的构成:

SQLAlchemy 最主要的组成就是SQLAlchemy CoreSQLAlchemy ORM 两大部分.官网

  • SQLAlchemy Core: 基于Scheme,类似传统的SQL 语句.

    • Connection Pooling: 连接池

    • Dlalect :根据Engine 的定义,调用不同的数据库API (比如mysql+pymysql)

    • schema/types:内部实现了类和表的映射

    • SQL Expession Language:封装好的SQL 语句

    • Engine:一个到数据的连接

  • SQLAlchemy ORM: ORM ,关系对象映射,更好的从面向对象的角度去操作数据库.下面着重讨论ORM.

2.什么是ORM

ORM(Object-Relational Mapping),对象关系映射.

对象和关系数据是业务实体的两种表现形式.业务实体在内存中表现为对象,在数据库中表现为关系数据.内存中的对象之间存在关联和继承关系.而在数据库中,关系数据无法直接表达多对多关联和继承关系.因此,ORM 一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射.

数据库中的表都是二维表,它的基本结构是行和列.如果一张表的内容用python 的数据结构表示出来的话,可以用一个list 来表示,它类似与list((1,2)) .在list 中包裹tuple 来表示一行记录.

比如,一张包含id,nameuser

 user = [(1, 'Jack'),(2,'Bob'),(3, 'Harry')]

PythonDB-API 返回的数据结构就类似上面这样的.

但是使用tuple 来表示一行,很难看出表的结构.比如在mysql 中也存在一张Users表.

 mysql root@192.168.101:test> desc Users;                                                                                                                                                                           +----------+-------------+------+-----+---------+-------+| Field    | Type        | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| id       | int(11)     | NO   | PRI | <null>  |       || name     | varchar(50) | YES  |     | <null>  |       || fullname | varchar(50) | YES  |     | <null>  |       || password | varchar(50) | YES  |     | <null>  |       |+----------+-------------+------+-----+---------+-------+

SQL 语句中的约束,非空,数据类型等等,根本不能使用一个单独的list 来表示.

但是如果把一个tupleclass 实例来表示,就更容易看出表的结构

 class Integer: def __init__(self, x):     self.x = int(x)class String:  def __init__(self, x):     self.x = str(x)  class User: def __init__(self, id,name):     self.id = Interger(id)     self.name = String(x)     user = [  User(1, 'Jack'),    User(2,'Bob'),    User(3, 'Harry')]

当然ORM 框架实现的并不是这么简单的,但是类似与这样把数据库的表结构映射在对象上,就是ORM.

而做这个工作的就是ORM 框架,在Python 中最有名的框架就是SQLAlchemy.

ORM 的优缺点:

  • 提高开发效率,提高代码重用

  • 是开发更加的抽象

  • 可移植,不只是局限在mysql,可以是MS-SQL,orcal 等.

  • 可以方便的引入一些附加功能等.

  • 自动化进行关系数据库的映射需要消耗系统性.

  • 在处理多表联查,where子句中复杂条件时,ORM 的语法会变得复杂.

3.开启MySQL 的查询日志

查询日志功能是否开启,并开启日志功能

 mysql root@192.168.101:test> show variables like 'general%';                    +------------------+---------------------------+| Variable_name    | Value                     |+------------------+---------------------------+| general_log      | OFF                       || general_log_file | /mysql_data/localhost.log |+------------------+---------------------------+mysql root@192.168.101:test> set GLOBAL general_log='ON';                       mysql root@192.168.101:test> show variables like 'general%';                    +------------------+---------------------------+| Variable_name    | Value                     |+------------------+---------------------------+| general_log      | ON                        || general_log_file | /mysql_data/localhost.log |+------------------+---------------------------+

在shall中查看日志(日志文件要根据自己的服务器的实际路径)

 $ tail -10 /mysql_data/localhost.log

4.SQLAlchemy 与数据库的逻辑对应

SQLALchemy 逻辑概念 数据库 说明
Engine() 连接数据库
Session() 连接池,事务池 SessionQuery 的入口
Model Python 中类对应数据库的表,它用面向对象的形式来表现数据库中的表
Column Python 类中定义了Column ,支持运算符操作
Query 可以对单行或多行操作(增删改查)

sqlalchemy mysql_SQLAlchemy(1)相关推荐

  1. sqlalchemy mysql_SQLAlchemy简明教程

    原文可见:SQLAlchemy简明教程 - Jiajun的编程随想 SQLAlchemy是Python中常用的一个ORM,SQLAlchemy分成三部分: ORM,就是我们用类来表示数据库schema ...

  2. SQLALchemy之Python连接MySQL

    20220225 https://www.cnblogs.com/toheart/p/9802990.html pymssql连接sqlserver https://blog.csdn.net/qq_ ...

  3. Python的数据库操作(Sqlalchemy)

    ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系.这样,我们要操作数据库,数据库中的表 ...

  4. 04:sqlalchemy操作数据库 不错

    目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...

  5. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  6. python 之路,Day11 (下)- sqlalchemy ORM

    python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 ...

  7. 自动获取mysql建表语句_脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明...

    常规建表语句: CREATE TABLE `test_table` ( `id` int(11) NOT NULL, `name` char(64) NOT NULL, `password` char ...

  8. ORM 框架中SQLALCHEMY一点点个人总结

    声明:工作原因涉及一点 What is ORM 答: object relation mapping 一种实现对象与数据库中的关系表映射的中间件.ORM 框架中最有名的是SQLALCHEMY 具体使用 ...

  9. Python之Mysql及SQLAlchemy操作总结

    一.Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to 'feng'@'%' identifi ...

最新文章

  1. 在进行商业运算时解决BigDecimal的精度丢失问题
  2. 一行代码卖出 570 美元, 天价代码的内幕
  3. 打开Excel文件并插入图片
  4. linux:apt的源
  5. C# 获取当前月第一天和最后一天 计算两个日期差多少天
  6. C#教程5:操作算子(1)
  7. hdu 2136 筛法求素数
  8. 美国物联网平台提供商Evrythng获得2480万美元B轮融资
  9. 史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(二)
  10. php新闻管理系统(简单)学习教程
  11. VS2017下载安装
  12. LGame-0.3(Android与JavaSE游戏引擎)正式发布,新增SRPG制作模块
  13. 清北级别,补助丰厚,这样的中科院信工所你心动了吗?
  14. 【一些好听的英文歌曲】
  15. Java用户注册手机短信验证码校验功能实现
  16. 数据挖掘里的开源问题(PAKDD 2009 WORKSHOP CALL FOR PAPER)
  17. LL(1)文法构造FIRST、FOLLOW、分析表并分析
  18. html超链接并可以返回,返回到上一页的html代码的几种写法
  19. 【分析数据集各类GT数量分布】
  20. 【OpenGL学习】光照贴图

热门文章

  1. 系统安全工作笔记001---zigw挖矿病毒_没想到生产环境给整成矿鸡了_安全意识有待提升....
  2. android学习笔记---42_服务的生命周期
  3. Android学习笔记06---电话拨号器的制作:项目结构深化
  4. 2017年7月9 号小计
  5. Resource is out of sync with the file system解决办法
  6. 手把手教你安装 FastAdmin 到虚拟主机 (phpStudy)
  7. Setting the Background Image for a List Control
  8. 西部数码服务器绑定域名解析,中国数据域名如何修改DNS设置方法
  9. php 解压zip到目录下,php 解压zip压缩包内容到指定目录的实例
  10. python如何监听cmd_如何从Python脚本捕获Python解释器和/或CMD.EXE的输出?