sqlalchemy 基本操作
表操作
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column from sqlalchemy import Integer,String,Text,Date,DateTime from sqlalchemy import create_engine Base = declarative_base() class Users(Base): __tablename__ = 'users' id = Column(Integer, primary_key = True ) name = Column(String( 32 ), index = True , nullable = False ) def create_all(): engine = create_engine( "mysql+pymysql://root:123456@127.0.0.1:3306/s9day120?charset=utf8" , max_overflow = 0 , # 超过连接池大小外最多创建的连接 pool_size = 5 , # 连接池大小 pool_timeout = 30 , # 池中没有线程最多等待的时间,否则报错 pool_recycle = - 1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) Base.metadata.create_all(engine) def drop_all(): engine = create_engine( "mysql+pymysql://root:123456@127.0.0.1:3306/s9day120?charset=utf8" , max_overflow = 0 , # 超过连接池大小外最多创建的连接 pool_size = 5 , # 连接池大小 pool_timeout = 30 , # 池中没有线程最多等待的时间,否则报错 pool_recycle = - 1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) Base.metadata.drop_all(engine) if __name__ = = '__main__' : create_all() |
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from models import Users # 创建引擎 engine = create_engine( "mysql+pymysql://root:123456@127.0.0.1:3306/s9day120?charset=utf8" , max_overflow = 0 , # 超过连接池大小外最多创建的连接 pool_size = 5 , # 连接池大小 pool_timeout = 30 , # 池中没有线程最多等待的时间,否则报错 pool_recycle = - 1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) # 根据引擎创建session工厂 SessionFactory = sessionmaker(bind = engine) # 用session工厂创建一个session对象 session = SessionFactory() .......... # 根据Users类对users表进行增删改查 .......... # 关闭session session.close() |
行操作
增
1
2
3
4
5
6
7
8
9
|
obj = Users(name = 'alex' ) session.add(obj) session.commit() session.add_all([ Users(name = '小东北' ), Users(name = '龙泰' ) ]) session.commit() |
删
1
2
|
session.query(Users). filter (Users. id > = 2 ).delete() session.commit() |
改
1
2
3
4
|
session.query(Users). filter (Users. id = = 4 ).update({Users.name: '东北' }) session.query(Users). filter (Users. id = = 4 ).update({ 'name' : '小东北' }) session.query(Users). filter (Users. id = = 4 ).update({ 'name' :Users.name + "DSB" },synchronize_session = False ) session.commit() |
查
1
2
3
4
5
6
7
8
9
10
|
result = session.query(Users). all () for row in result: print (row. id ,row.name) result = session.query(Users). filter (Users. id > = 2 ) for row in result: print (row. id ,row.name) result = session.query(Users). filter (Users. id > = 2 ).first() print (result) |
其他常用操作
指定查询列
123result
=
session.query(Users.
id
,Users.name.label(
'cname'
)).
all
()
for
item
in
result:
print
(item[
0
],item.
id
,item.cname)
多个查询条件(默认and)
1session.query(Users).
filter
(Users.
id
>
1
, Users.name
=
=
'eric'
).
all
()
between
1session.query(Users).
filter
(Users.
id
.between(
1
,
3
), Users.name
=
=
'eric'
).
all
()
in
12session.query(Users).
filter
(Users.
id
.in_([
1
,
3
,
4
])).
all
()
session.query(Users).
filter
(~Users.
id
.in_([
1
,
3
,
4
])).
all
()
# 非
子查询
1session.query(Users).
filter
(Users.
id
.in_(session.query(Users.
id
).
filter
(Users.name
=
=
'eric'
))).
all
()
and和or
12345678910from
sqlalchemy
import
and_, or_
session.query(Users).
filter
(Users.
id
>
3
, Users.name
=
=
'eric'
).
all
()
session.query(Users).
filter
(and_(Users.
id
>
3
, Users.name
=
=
'eric'
)).
all
()
session.query(Users).
filter
(or_(Users.
id
<
2
, Users.name
=
=
'eric'
)).
all
()
session.query(Users).
filter
(
or_(
Users.
id
<
2
,
and_(Users.name
=
=
'eric'
, Users.
id
>
3
),
Users.extra !
=
""
)).
all
()
filter_by
1session.query(Users).filter_by(name
=
'alex'
).
all
()
通配符
12ret
=
session.query(Users).
filter
(Users.name.like(
'e%'
)).
all
()
ret
=
session.query(Users).
filter
(~Users.name.like(
'e%'
)).
all
()
切片
1result
=
session.query(Users)[
1
:
2
]
排序
12ret
=
session.query(Users).order_by(Users.name.desc()).
all
()
ret
=
session.query(Users).order_by(Users.name.desc(), Users.
id
.asc()).
all
()
group by
123456789101112131415ret
=
session.query(
Users.depart_id,
func.count(Users.
id
),
).group_by(Users.depart_id).
all
()
for
item
in
ret:
print
(item)
from
sqlalchemy.sql
import
func
ret
=
session.query(
Users.depart_id,
func.count(Users.
id
),
).group_by(Users.depart_id).having(func.count(Users.
id
) >
=
2
).
all
()
for
item
in
ret:
print
(item)
union和union all
1234567q1
=
session.query(Users.name).
filter
(Users.
id
>
2
)
q2
=
session.query(Favor.caption).
filter
(Favor.nid <
2
)
ret
=
q1.union(q2).
all
()
q1
=
session.query(Users.name).
filter
(Users.
id
>
2
)
q2
=
session.query(Favor.caption).
filter
(Favor.nid <
2
)
ret
=
q1.union_all(q2).
all
()
sqlalchemy 基本操作的更多相关文章
- Python SQLAlchemy基本操作和常用技巧包含大量实例,非常好python
http://www.makaidong.com/%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6/28053.shtml "Python SQLAlchemy基本操 ...
- SQLAlchemy基本操作和常用技巧
点击打开链接 Python的ORM框架SQLAlchemy基本操作和常用技巧,包含大量实例,非常好的一个学习SQLAlchemy的教程,需要的朋友可以参考下 python编程语言下的一款开源软件.提供 ...
- 【Python】Python SQLAlchemy基本操作和常用技巧
首先说下,由于最新的 0.8 版还是开发版本,因此我使用的是 0.79 版,API 也许会有些不同.因为我是搭配 MySQL InnoDB 使用,所以使用其他数据库的也不能完全照搬本文. 接着就从安装 ...
- Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
https://www.jb51.net/article/49789.htm 首先说下,由于最新的 0.8 版还是开发版本,因此我使用的是 0.79 版,API 也许会有些不同.因为我是搭配 MySQ ...
- Python SQLAlchemy基本操作和常用技巧
转自:https://www.jb51.net/article/49789.htm 首先说下,由于最新的 0.8 版还是开发版本,因此我使用的是 0.79 版,API 也许会有些不同.因为我是搭配 M ...
- sqlalchemy——基本操作
以下所有代码片段都使用了统一的引用,该引用如下: from sqlalchemy import create_engine, ForeignKey from sqlalchemy.ext.declar ...
- Python SqlAlchemy使用方法
1.初始化连接 from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker engine = create ...
- python数据库操作之pymysql模块和sqlalchemy模块(项目必备)
pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1.下载安装 pip3 install pymysql 2.操作数据库 (1).执行sql #! ...
- sqlalchemy外键和relationship查询
前面的文章中讲解了外键的基础知识和操作,上一篇文章讲解了sqlalchemy的基本操作.前面两篇文章都是作为铺垫,为下面的文章打好基础.记得初一时第一次期中考试时考的不好,老爸安慰我说:“学习是一个循 ...
随机推荐
- 小米Python后端面试题
电话面 时长:30m 说一下对浏览器缓存的理解: 说一下MySQL优化: 说一下redis: 说一下从输入url到返回都发生了什么: 域名怎么解析的: 一面 1h 编程实现翻转单链表: MySQL中v ...
- 怎样写一个Hello World!
Python 的 Hello, World! 应该是所有语言里面最简单的: print("Hello, World!")
- 怎样获取页面中所有带href属性的标签集合
使用: document.links document.links instanceof HTMLCollection; 注意: 1. a 标签和 area 标签可以设置 href属性, 因此可以被获 ...
- 4-MySQL DBA笔记-开发进阶
第4章 开发进阶 本章将介绍一些重中之重的数据库开发知识.在数据库表设计中,范式设计是非常重要的基础理论,因此本章把它放在最前面进行讲解,而这其中又会涉及另一个重要的概念——反范式设计.接下来会讲述M ...
- springMvc 框架
第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping查找 Handler 可以根据xml配置.注解进行查找 第三步:处理器映射器Han ...
- Web API 接口版本控制 SDammann.WebApi.Versioning
前言 在设计对外 Web API 时,实务上可能会有新旧版本 API 并存的情况,例如开放 Web API 给厂商串接,但同一个服务更新版本时,不一定所有厂商可以在同一时间都跟着更新他们的系统,但如果 ...
- 沿路径动画(Animation Along a Path)
Silverlight 提供一个好的动画基础,但缺少一种方便的方法沿任意几何路径对象进行动画处理.在Windows Presentation Foundation中提供了动画处理类DoubleAnim ...
- .net Core 图片验证码 基于SkiaSharp实现
public class ImageCaptcha { /// <summary> /// 干扰线的颜色集合 /// </summary> private List<SK ...
- 公共的强制保留两位小数的js方法
强制保留两位小数的js方法 //写一个公共的强制保留两位小数的js方法 function toDecimal2 (x) { var f = parseFloat(x) if (isNaN(f)) { ...
- hive面试题(免费拿走不谢)
Hive 最常见的几个面试题 1.hive 的使用, 内外部表的区别,分区作用, UDF 和 Hive 优化(1)hive 使用:仓库.工具(2)hive 内部表:加载数据到 hive 所在的 hdf ...