sqlalchemy(一)基本操作

sqlalchemy采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。

安装

  1. 需要安装MySQLdb
  2. pip install sqlalchemy

安装完成后,执行

>>>import sqlalchemy
>>>sqlalchemy.__version__

连接数据库

在sqlalchemy中,session用于创建程序与数据库之间的会话。所有对象的载入和保存都需要通过session对象。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmakerengine = create_engine('mysql://user:passwd@ip:port/db', echo=True)
Session = sessionmaker(bind=engine)session = Session()
session.execute('show databases')

其中,echoTrue代表打开logging。

创建一个映射

一个映射对应着一个Python类,用来表示一个表的结构。下面创建一个person表,包括id和name两个字段。

from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class Person(Base):__tablename__ = 'person'id   = Column(Integer, primary_key=True)name = Column(String(32))def __repr__(self):return "<Person(name='%s')>" % self.name

添加数据

#创建一个person对象
person = Person(name='jack')
#添加person对象,但是仍然没有commit到数据库
session.add(person)
#commit操作
session.commit()

如何获取id的?

>>> person = Person(name='ilis')
>>> person.id #此时还没有commit到mysql,因此无id
>>> session.add(person)
>>> person.id #同上
>>> session.commit()
2015-08-18 23:08:23,530 INFO sqlalchemy.engine.base.Engine INSERT INTO person (name) VALUES (%s)
2015-08-18 23:08:23,531 INFO sqlalchemy.engine.base.Engine ('ilis',)
2015-08-18 23:08:23,532 INFO sqlalchemy.engine.base.Engine COMMIT
>>> person.id #commit后,可以获取该对象的id
2015-08-18 23:08:27,556 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2015-08-18 23:08:27,557 INFO sqlalchemy.engine.base.Engine SELECT person.id AS person_id, person.name AS person_name
FROM person
WHERE person.id = %s
2015-08-18 23:08:27,557 INFO sqlalchemy.engine.base.Engine (5L,)
5L
>>>

添加多个数据

session.add_all([Person(name='jack'),Person(name='mike')
])
session.commit()

回滚

>>> person = Person(name='test')
>>> session.add(person)
>>> session.query(person).filter(name=='test')
>>> session.query(Person).filter(Person.name=='test').all()
2015-08-18 23:13:23,265 INFO sqlalchemy.engine.base.Engine INSERT INTO person (name) VALUES (%s)
2015-08-18 23:13:23,265 INFO sqlalchemy.engine.base.Engine ('test',)
2015-08-18 23:13:23,267 INFO sqlalchemy.engine.base.Engine SELECT person.id AS person_id, person.name AS person_name
FROM person
WHERE person.name = %s
2015-08-18 23:13:23,267 INFO sqlalchemy.engine.base.Engine ('test',)
[<demo.Person object at 0x7f4e37730510>]
>>> session.rollback()
2015-08-18 23:13:37,496 INFO sqlalchemy.engine.base.Engine ROLLBACK
>>> session.query(Person).filter(Person.name=='test').all()
2015-08-18 23:13:38,690 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2015-08-18 23:13:38,691 INFO sqlalchemy.engine.base.Engine SELECT person.id AS person_id, person.name AS person_name
FROM person
WHERE person.name = %s
2015-08-18 23:13:38,692 INFO sqlalchemy.engine.base.Engine ('test',)
[]
>>>

数据查询

使用Session的query()方法。

#获取所有数据
session.query(Person).all()#获取某一列数据,类似于django的get,如果返回数据为多个则报错
session.query(Person).filter(Person.name=='jack').one()#获取返回数据的第一行
session.query(Person).first()#过滤数据
session.query(Person.name).filter(Person.id>1).all()#limit
session.query(Person).all()[1:3]#order by
session.query(Person).ordre_by(-Person.id)#equal/like/in
query = session.query(Person)
query.filter(Person.id==1).all()
query.filter(Person.id!=1).all()
query.filter(Person.name.like('%ac%')).all()
query.filter(Person.id.in_([1,2,3])).all()
query.filter(~Person.id.in_([1,2,3])).all()
query.filter(Person.name==None).all()#and or
from sqlalchemy import and_
query.filter(and_(Person.id==1, Person.name=='jack')).all()
query.filter(Person.id==1, Person.name=='jack').all()
query.filter(Person.id==1).filter(Person.name=='jack').all()
from sqlalchemy import or_
query.filter(or_(Person.id==1, Person.id==2)).all()

使用text

from sqlalchemy import text
query.filter(text("id>1")).all()
query.filter(Person.id>1).all() #同上
query.filter(text("id>:id")).params(id=1).all() #使用:,params来传参query.from_statement(text("select * from person where name=:name")).\params(name='jack').all()

计数

Query使用count()函数来实现查询计数。

query.filter(Person.id>1).count()

group by的用法

from sqlalchemy import func
session.query(func.count(Person.name), Person.name),group_by(Person.name).all()

实现count(*)来查询表内行数

session.query(func.count('*')).select_from(Person).scalar()
session.query(func.count(Person.id)).scalar()

转载于:https://www.cnblogs.com/coder2012/p/4741081.html

sqlalchemy(一)基本操作相关推荐

  1. SQLAlchemy 一些基本操作

    SQLAlchemy 一些基本操作 建表:db.create_all() 一次性创建全部的表 插入数据: ​ 1.创建变量user = User(username = "hjj2" ...

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

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

  3. python之SQLAlchemy ORM

    前言: 这篇博客主要介绍下SQLAlchemy及基本操作,写完后有空做个堡垒机小项目.有兴趣可看下python之数据库(mysql)操作.下篇博客整理写篇关于Web框架和django基础~~ 一.OR ...

  4. sqlalchemy外键和relationship查询

    前面的文章中讲解了外键的基础知识和操作,上一篇文章讲解了sqlalchemy的基本操作.前面两篇文章都是作为铺垫,为下面的文章打好基础.记得初一时第一次期中考试时考的不好,老爸安慰我说:"学 ...

  5. fastapi——简单快速入门

    fastapi--快速入门笔记 根据慕课网视频教程 地址:https://www.bilibili.com/video/BV1iN411X72b?p=36 print("\033[31m5. ...

  6. python数据库操作之pymysql模块和sqlalchemy模块(项目必备)

    pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1.下载安装 pip3 install pymysql 2.操作数据库 (1).执行sql #! ...

  7. Python SqlAlchemy使用方法

    1.初始化连接 from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker engine = create ...

  8. python ORM - sqlalchemy 操作使用

    python操作数据库 使用 ORM - sqlalchemy,pymsql 安装: pip install pymsq pip install sqlalchemy 一. '''连接数据库''' ' ...

  9. Web框架——Flask系列之Flask-SQLAlchemy数据库的基本操作(九)

    数据库基本操作 在Flask-SQLAlchemy中,插入.修改.删除操作,均由数据库会话管理. 会话用 db.session 表示.在准备把数据写入数据库前,要先将数据添加到会话中然后调用db.se ...

最新文章

  1. 悬挑脚手架卸载钢丝绳要求_100m的悬挑脚手架技术交底
  2. Linux基础命令小结
  3. 计算机搞定44年几何难题,原来这2个人25年前猜对了
  4. Spring注解标签详解@Autowired @Qualifier等
  5. 常用,好用的js代码
  6. Java进击C#——语法之多线程
  7. VMware Workstation不可恢复错误: (vcpu-0)
  8. 中兴智能视觉大数据报道:人脸识别画上浓妆也不耽误识别
  9. 打出租辆来回机场好贵
  10. 千万级数据清洗ETL设计方案
  11. .img文件怎么打开(解压缩)
  12. 50岁的程序员该何去何从
  13. java 执行Linux命令并打印执行结果
  14. 计算机课屏幕以锁定,电脑无限宝锁定课堂怎么办
  15. Origin Pro2017使用PatchOriginPro.exe破解提示Patch unsuccessfully or already
  16. R语言爬取中国天气网单个城市实时天气预报数据
  17. 计算机毕业设计Java医保局综合办公系统(源码+系统+mysql数据库+lw文档)
  18. 达摩院视觉AI训练营-搭建身份证识别系统-学习笔记
  19. ubuntu18.04 分辨率设置
  20. 一文读懂高速互联的阻抗及反射

热门文章

  1. LeetCode 905 Sort Array By Parity--Java stream,Python lambda表达式一行 解法
  2. 更新elementui图标不显示_超简单elementui主题及变量修改方案
  3. dacom蓝牙耳机怎么重置_双蓝牙耳机另一半怎么连接
  4. @Profile 根据不同环境注入bean
  5. js转Java的list_JS之JSON字符串到后台用Java转换成List实体类
  6. catia 创成钣金设计_弯曲的钣金设计技巧
  7. CGBitmapContextCreate参数详解
  8. 一切皆Socket!
  9. php看什么教程,PHP初学者适合看什么
  10. mysql where后面if_mysql查询语句where后面加if判断