一、ORM介绍

orm英文全称object relational mapping,是对象映射关系程序,简单来说类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用SQL语言。

orm的优点:

隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。使得我们与数据库交互变得简单易行,并且完全不用考虑的SQL语句。快速开发,由此而来。

ORM使我们构造固化数据结构变得简单易行。

缺点:

无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。

安装:

pip install sqlalchemy #也可以去下轮子安装,最近pypi不太好上

pip install pymysql

二、使用

2.1 在数据库中,当我们要建一个表时:

create table tablename (
field_id integer not null auto_increment,
field2 char(32) not null,
field3 varchar(64),
primary key (field_id));

写了一个简单的SQL语句,但是还有插入数据啊、查询啊、连表查询啊、增删改查等等,既然学到了orm也知道写SQL语句有多痛苦了

那我们用sqlalchemy来写一个吧!

sqlalchemy连接数据库语句:Python下使用 mysql+pymysql

mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

from sqlchemy import create_engine
from sqlchemy.ext.declarative import declarative_base
from sqlchemy import Integer, String, Column, ForeignKey
from sqlchemy.orm import sessionmaker engine = create_engine("mysql+pymysql://user_name:password@localhost/data_base_name",
encoding='utf-8', echo= True) Base = declarative_base() class User(Base): #1以下就是创建一个userinfo表了
__tablename__ = 'userinfo'
uid = Column(Integer, primary_key= True)
name = Column(String(32))
password = Column(String(64))
create_time = Column(String(64)) def __repr__(self):
return "<uid: {0} name: {1}".format(self.uid, self.name) Base.metadata.create_all(engine) #2在引擎上创建表

2的语句,这样就把我们在orm中的表远程连接到数据库,创建到database中了。

另一种创建方式,看看就好。

from sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey
from sqlalchemy.orm import mapper metadata = MetaData() user = Table('user', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(50)),
Column('fullname', String(50)),
Column('password', String(12))
) class User(object):
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password mapper(User, user)

三、增删改查

3.1 增

在orm里面进行操作都需要一个类似cusor的游标,这样来创建:

from sqlalchemy.orm import sessionmaker 引入该模块

Session_class = sessionmaker(bind= engine) 绑定engine ,会返回给你一个session类。注意这是个类

session = Session_class() 这样都得到了游标了

创建一条数据:

import time
time_now = time.time() #拿到当前的时间戳
user_obj = User(name= 'lina', password= '123456789', create_time= str(time_now))
session.add(user_obj) #将user_obj对象添加到事务中

注意:sqlalchemy默认开启事务所以这样还没成功,接下来:

session.commit() 只需要commit一下就好了,session还有个session.rollback()回滚函数,当你操作失败就自动调用了

3.2 查

条件查询:

list_user_obj = session.query(User).filter_by(name= 'lina').all() 这样我们就查询到了,通过.all()方法会返回所有User表里面name= 'lina'的对象组成一个列表,用.first()就只返回一个对象了

还有一个filter方法,不太建议,用法为参数要变为session.query(User).filter(User.name = name)变成User中的name对象

一般filter用在:模糊查询(统计)、多条件查询:

session.query(User).filter(User.name.like('li%')).count() 模糊查询,并通过.count()统计 session.query(User).filter(User.uid>2).filter(User.uid<5).all()`

分组

from sqlalchemy import func

session.query(func.count(User.name),User.name).group_by(User.name).all()

相当于原生sql为

select count(user.name) AS count_1, user.name AS user_name

FROM user GROUP BY user.name

3.3 改

user_obj = session.query(User).filter_by(name="lina").first() #查询想要修改的数据

user_obj.name = "david" #通过查询到的对象来修改对象中的属性

session.commit() #将修改后的对象comiit就完成一次修改了

3.4 删

查询到要删除的条数据,或者多个对象,直接调用session.delete(obj)然后提交一下就好了

obj = session.query(User).filter(User.name.like('%na').all()

session.delete(obj)

session.commit()

sqlalchemy orm 操作 MySQL的更多相关文章

  1. golang利用beego框架orm操作mysql

    GO引入orm框架操作mysql 在beego框架中引入orm操作mysql需要进行的步骤: 第一步:导入orm框架依赖,导入mysql数据库的驱动依赖 import ( "github.c ...

  2. Flask学习笔记:数据库ORM操作MySQL+pymysql/mysql-python+SQLAlchemy/Flask-SQLAlchemy

    Python中使用sqlalchemy插件可以实现ORM(Object Relationship Mapping,模型关系映射)框架,而Flask中的flask-sqlalchemy其实就是在sqla ...

  3. .net core使用orm操作mysql数据库

    Mysql数据库由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库.MySQL是一个多用户.多线程的关系型数据库管理系 ...

  4. ORM操作mysql

    创建表和添加数据 import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import ...

  5. beego orm操作mysql数据库

    慢慢弄起来~~ 按官方操作文档试一下. 那个err重复和user编号问题,以后再弄.. package main import ( "fmt" "github.com/a ...

  6. PHP ORM操作MySQL数据库

    ORM----Oriented Relationship Mapper,即用面向对象的方式来操作数据库.归根结底,还是对于SQL语句的封装. 首先,我们的数据库有如下一张表: 我们希望能够对这张表,利 ...

  7. 【Django】ORM操作MySQL数据库遇到的一些问题

    关于查询操作: 1.exact和iexact exact相当于=   iexact相当于like(但是这里的like和数据库的不一样,没有给后面条件加上%%所以这里like和=的作用相似) artic ...

  8. python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy

    内容一览: 1.Python操作MySQL数据库 2.ORM sqlalchemy学习 1.Python操作MySQL数据库 2. ORM sqlachemy 2.1 ORM简介 对象关系映射(英语: ...

  9. 第二百八十九节,MySQL数据库-ORM之sqlalchemy模块操作数据库

    MySQL数据库-ORM之sqlalchemy模块操作数据库 sqlalchemy第三方模块 sqlalchemysqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API ...

随机推荐

  1. MySQL的并发控制与加锁分析

    本文主要是针对MySQL/InnoDB的并发控制和加锁技术做一个比较深入的剖析,并且对其中涉及到的重要的概念,如多版本并发控制(MVCC),脏读(dirty read),幻读(phantom read ...

  2. [题目] Luogu P3707 [SDOI2017]相关分析

    参考资料:[Luogu 3707] SDOI2017 相关分析 P3707 [SDOI2017]相关分析 TFRAC FRAC DFRAC \(\tfrac{\sum}{1}\) \(\frac{\s ...

  3. session、cookie 记住登录状态的实现

    Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...

  4. Jenkins忘记密码解决方案

    # 当jenkins忘记了管理用户的密码时,只能通过修改配置文件并重启的方式初始化设置用户名及密码,操作如下: 找到jenkins的配置目录,笔者的jenkins是下载的war包直接丢在tomcat下 ...

  5. 分布式计算(三)Azkaban介绍

    转载自:Azkaban学习之路 (一)Azkaban的基础介绍 目录 一.为什么需要工作流调度器 二.工作流调度实现方式 三.常见工作流调度系统 四.各种调度工具对比 五.Azkaban 与 Oozi ...

  6. 上传文件,不依赖 Jquery flash 插件,用到HTML5 input 新属性实现过滤文件格式、同时上传多个文件

    1.样式 2.js 3.后台处理 4.效果图 一.样式 <style> .divUpload { position: relative; } .divUploadFirst { width ...

  7. ASP.NET Core中如果Response.HasStarted已经为true,就不能更改Response.Cookies和Response.Headers等属性的值了

    最近我在ASP.NET Core中做了一个中间件CustomizedMiddleware,要说该中间件的功能也很简单,其实就是往HttpResponse中添加一个Cookie而已,但是我将添加Cook ...

  8. 复习整理9:SpringMVC应用以及源码解析

    一:SpringMVC是什么 SpringMVC只是Spring的一个子框架,作用学过Struts2的应该很好理解,他们都是MVC的框架.学他就是用来代替Struts2的,那么为什么不用Struts2 ...

  9. loj6062 pair

    直接套用霍尔定理. 由于A有多个选择,考虑维护B是否合法. 首先B数组的顺序显然是没有用的,可以直接排序. 然后每个A就都变成了向一个后缀连边. 对于B,原本需要check每一个集合是否满足|u|&l ...

  10. Visual Studio2017 Remote Debugger

    前言 大家在使用vs打包后的文件部署到服务器后,有时候我们需要对线网的后台进行调试.但是它不像在VS中.这个时候我们该怎么调试呢? 微软想到了这一点,他们在 VS 中给我们提供了一个功能: Remot ...