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 解LeetCode:33. Search in Rotated Sorted Array
题目描述:在一个旋转数组中查找给定的值,其中旋转数组中不含重复值: 思路: 第一遍二分遍历,找到数组中最小值的索引: 第二遍分别对最小值左右两边的数组进行二分查找: class Solution(ob ...
- ROS的初步学习--创建一个工作空间和一个程序包
快速开始 创建工作区(workspace) 工作区可以作为一个独立的项目进行编译,存放ROS程序的源文件.编译文件和执行文件.建立工作区的方法如下: mkdir -p ~/catkin_ws/src ...
- 把人都送到房子里的最小花费--最小费用最大流MCMF
题意:http://acm.hdu.edu.cn/showproblem.php?pid=1533 相邻的容量为inf,费用为1,S到m容量为1,费用为0 ,H到T容量为1,费用为0. 建图跑-最小费 ...
- Django新手入门必看
pip install django==2.1.7 (现在Django3.0出来,推荐大家可以使用一下Django3.0) pip list查看
- 怎样判断浏览器是否支持canvas
1. 如果网页必须使用canvas, 则需要告知用户更换或更新浏览器. 这时可以通过在<canvas>标签之间添加替代元素进行 <canvas id="c1"&g ...
- 操作系统中堆(heap)与栈(stack)的区别
主要区别如下: 一.空间分配: 1.堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表.PS:java中都是系统GC,程序员无法进行GC. 2.栈(操作 ...
- PS笔记
PS 笔记 PS调色人像步骤-by李涛: 色阶- 追饱和度- 色彩平衡- 中间调不动,阴影偏青,偏绿,偏蓝 , 高光偏红,偏一点蓝 锐化 1. 冷暖对比-by狼族摄影: 高光和阴影设置为偏青色 ...
- JavaScript 的编译原理
JavaScript 是一门编译语言. JavaScript 的编译是发生在代码执行前的几微米(甚至更短)的事件内,所以 JavaScript 没有其他语言那么多的时间来进行优化. 当 JavaScr ...
- 用python 打印出爱心
其实,如果程序员真的很浪漫,普通人不懂,科技兴旺,也许你是惊呆了!!!!! 今天,泰泰又给你带来了一个“程序员技术(浪漫)表现”教程.飞鲸水龙头有希望它能在这个七月前夜帮到你.如果使用成功,记得给泰泰 ...
- 【转】js原型链与继承
原文链接:https://blog.csdn.net/u012468376/article/details/53127929 一.继承的概念 继承是所有的面向对象的语言最重要的特征之一.大部分的o ...