sqlalchemy(一)基本操作
sqlalchemy(一)基本操作
sqlalchemy采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。
安装
- 需要安装MySQLdb
- 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')
其中,echo
为True
代表打开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(一)基本操作相关推荐
- SQLAlchemy 一些基本操作
SQLAlchemy 一些基本操作 建表:db.create_all() 一次性创建全部的表 插入数据: 1.创建变量user = User(username = "hjj2" ...
- 04:sqlalchemy操作数据库 不错
目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...
- python之SQLAlchemy ORM
前言: 这篇博客主要介绍下SQLAlchemy及基本操作,写完后有空做个堡垒机小项目.有兴趣可看下python之数据库(mysql)操作.下篇博客整理写篇关于Web框架和django基础~~ 一.OR ...
- sqlalchemy外键和relationship查询
前面的文章中讲解了外键的基础知识和操作,上一篇文章讲解了sqlalchemy的基本操作.前面两篇文章都是作为铺垫,为下面的文章打好基础.记得初一时第一次期中考试时考的不好,老爸安慰我说:"学 ...
- fastapi——简单快速入门
fastapi--快速入门笔记 根据慕课网视频教程 地址:https://www.bilibili.com/video/BV1iN411X72b?p=36 print("\033[31m5. ...
- python数据库操作之pymysql模块和sqlalchemy模块(项目必备)
pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1.下载安装 pip3 install pymysql 2.操作数据库 (1).执行sql #! ...
- Python SqlAlchemy使用方法
1.初始化连接 from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker engine = create ...
- python ORM - sqlalchemy 操作使用
python操作数据库 使用 ORM - sqlalchemy,pymsql 安装: pip install pymsq pip install sqlalchemy 一. '''连接数据库''' ' ...
- Web框架——Flask系列之Flask-SQLAlchemy数据库的基本操作(九)
数据库基本操作 在Flask-SQLAlchemy中,插入.修改.删除操作,均由数据库会话管理. 会话用 db.session 表示.在准备把数据写入数据库前,要先将数据添加到会话中然后调用db.se ...
最新文章
- 悬挑脚手架卸载钢丝绳要求_100m的悬挑脚手架技术交底
- Linux基础命令小结
- 计算机搞定44年几何难题,原来这2个人25年前猜对了
- Spring注解标签详解@Autowired @Qualifier等
- 常用,好用的js代码
- Java进击C#——语法之多线程
- VMware Workstation不可恢复错误: (vcpu-0)
- 中兴智能视觉大数据报道:人脸识别画上浓妆也不耽误识别
- 打出租辆来回机场好贵
- 千万级数据清洗ETL设计方案
- .img文件怎么打开(解压缩)
- 50岁的程序员该何去何从
- java 执行Linux命令并打印执行结果
- 计算机课屏幕以锁定,电脑无限宝锁定课堂怎么办
- Origin Pro2017使用PatchOriginPro.exe破解提示Patch unsuccessfully or already
- R语言爬取中国天气网单个城市实时天气预报数据
- 计算机毕业设计Java医保局综合办公系统(源码+系统+mysql数据库+lw文档)
- 达摩院视觉AI训练营-搭建身份证识别系统-学习笔记
- ubuntu18.04 分辨率设置
- 一文读懂高速互联的阻抗及反射
热门文章
- LeetCode 905	 Sort Array By Parity--Java stream,Python lambda表达式一行 解法
- 更新elementui图标不显示_超简单elementui主题及变量修改方案
- dacom蓝牙耳机怎么重置_双蓝牙耳机另一半怎么连接
- @Profile 根据不同环境注入bean
- js转Java的list_JS之JSON字符串到后台用Java转换成List实体类
- catia 创成钣金设计_弯曲的钣金设计技巧
- CGBitmapContextCreate参数详解
- 一切皆Socket!
- php看什么教程,PHP初学者适合看什么
- mysql where后面if_mysql查询语句where后面加if判断