SQLAlchemy 使用教程
前戏:
不用怀疑,你肯定用过Django中的orm,这个orm框架是django框架中自己封装的,在Django中配置和使用较为简单,但是并不适用于其他web框架,而今天说的sqlalchemy是兼容python语言的orm框架,相信你已经明白谁牛逼!
下面,接下来....
还有比案例更好的教程吗,那下面请您享用为您准备好的大餐...
1.单表操作
1.1创建表
导入sqlachemy资源包
案例
from sqlalchemy.ext.declarative import declarative_base BaseModel = declarative_base() # 创建 Class / Table
from sqlalchemy import Column,Integer,String class User(BaseModel):
__tablename__ = "user" # 创建Table时名字
id = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(32),nullable=False,index=True,unique=True)
# Column 定义数据列
# int string 数据类型 # 数据库引擎的创建:
from sqlalchemy.engine import create_engine
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/dbname?charset=utf8") # 数据库连接驱动语句 #利用 User 去数据库创建 user Table
BaseModel.metadata.create_all(engine) # 数据库引擎
# 数据库呢? 数据库服务器地址呢?
# 数据库连接呢?
1.2CURD(增删改查)
案例
# 模拟 navcat 操作
# 1.选择数据库
from sqlalchemy.engine import create_engine
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s21?charset=utf8")
# 2.选择表
# 3.创建查询窗口
from sqlalchemy.orm import sessionmaker
select_db = sessionmaker(engine) # 选中数据库
db_session = select_db() # 已经打开查询窗口
# 4.写入SQL语句
user = User(name="Alexander.DSB.Li") # == insert into user(`name`) value ("Alexander.DSB.Li")
user_list = [User(name="Alex's Father"),User(name="李杰")]
# 放入查询窗口
db_session.add(user)
db_session.add_all(user_list)
# 5.提交sql语句
db_session.commit()
# 6.关闭查询窗口
db_session.close() # 简单无条件查询
# """
# select * from user table_user == class_User
# """
res = db_session.query(User).all() # 查询全部符合条件的数据
res = db_session.query(User).first() # 查询符合条件的第一条数据
print(res.id,res.name) # 简单条件查询
# """
# select * from user where id=3
# """
res = db_session.query(User).filter(User.id==3).all()
print(res[0].id,res[0].name)
res = db_session.query(User).filter_by(id=3).all() res = db_session.query(User).filter(User.id==3 , User.name == "123").all()
print(res)
#
is_true_or_false = User.id==3 and User.name == "123" # 修改数据 update
res = db_session.query(User).filter(User.id == 1).update({"name":"李亚历山大"})
db_session.commit()
db_session.close() # 删除数据
res = db_session.query(User).filter(User.id == 2).delete()
db_session.commit()
db_session.close()
2.一对多
2.1创建表
案例
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,ForeignKey
from sqlalchemy.engine import create_engine #ORM精髓 relationship
from sqlalchemy.orm import relationship engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s21?charset=utf8")
BaseModel = declarative_base() # 一对多
class School(BaseModel):
__tablename__ = "school"
id = Column(Integer,primary_key=True)
name = Column(String(32),nullable=False) class Student(BaseModel):
__tablename__ = "student"
id = Column(Integer,primary_key=True)
name = Column(String(32),nullable=False)
sch_id = Column(Integer,ForeignKey("school.id")) # 关系映射
stu2sch = relationship("School",backref="sch2stu") BaseModel.metadata.create_all(engine)
2.2CURD
使用案例
from sqlalchemy.orm import sessionmaker
from app01.static.上午.createForeignKey import engine select_db = sessionmaker(engine)
db_session = select_db() # 增加数据
# 先建立一个学校 再查询这个学校的id 利用这个ID 再去创建学生添加sch_id
# relationship 正向添加 relationship字段出现在哪个类
# stu = Student(name="DragonFire",stu2sch=School(name="OldBoyBeijing"))
# stu sql 语句
# db_session.add(stu)
# db_session.commit()
# db_session.close() # relationship 反向添加
# sch = School(name="OldBoyShanghai")
# sch.sch2stu = [
# Student(name="赵丽颖"),
# Student(name="冯绍峰")
# ]
#
# db_session.add(sch)
# db_session.commit()
# db_session.close() # 查询 relationship 正向
# res = db_session.query(Student).all()
# for stu in res:
# print(stu.name,stu.stu2sch.name) # 查询 relationship 反向
# res = db_session.query(School).all()
# for sch in res:
# # print(sch.name,len(sch.sch2stu)) 学校里面有多少学生
# for stu in sch.sch2stu:
# print(sch.name,stu.name)
3.多对多
3.1 创建表
案例
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,ForeignKey
from sqlalchemy.engine import create_engine
from sqlalchemy.orm import relationship BaseModel = declarative_base()
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s21?charset=utf8") class Girl(BaseModel):
__tablename__ = "girl"
id = Column(Integer,primary_key=True)
name = Column(String(32),nullable=False) gyb = relationship("Boy",backref="byg",secondary="hotel") # secondary="hotel" 数据表中的数据才能证明两者关系 class Boy(BaseModel):
__tablename__ = "boy"
id = Column(Integer,primary_key=True)
name = Column(String(32),nullable=False) class Hotel(BaseModel):
__tablename__ = "hotel"
id = Column(Integer,primary_key=True)
bid = Column(Integer,ForeignKey("boy.id"))
gid = Column(Integer,ForeignKey("girl.id")) BaseModel.metadata.create_all(engine)
3.2CURD
案例
from sqlalchemy.orm import sessionmaker
from app01.static.上午.createM2M import engine select_db = sessionmaker(engine)
db_session = select_db() # 增加数据 relationship 正向添加
# g = Girl(name="赵丽颖",gyb=[Boy(name="DragonFire"),Boy(name="冯绍峰")])
# db_session.add(g)
# db_session.commit()
# db_session.close() # 增加数据 relationship 反向添加
# b = Boy(name="李杰")
# b.byg = [
# Girl(name="罗玉凤"),
# Girl(name="朱利安"),
# Girl(name="乔碧萝")
# ]
#
# db_session.add(b)
# db_session.commit()
# db_session.close() # 查询 relationship 正向
# res = db_session.query(Girl).all()
# for g in res:
# print(g.name,len(g.gyb)) # 查询 relationship 反向
# res = db_session.query(Boy).all()
# for b in res:
# print(b.name,len(b.byg))
SQLAlchemy 使用教程的更多相关文章
- Flask 中的 SQLAlchemy 使用教程
Flask 是一个 python web micro framework.所谓微框架,主要是 flask 简洁与轻巧,自定义程度高.相比 django 更加轻量级. 之前一直折腾 django,得益于 ...
- sqlalchemy基础教程
一.基本配置 连接数据库 外部连接数据库时,用于表名数据库身份的一般是一个URL.在sqlalchemy中将该URL包装到一个引擎中,利用这个引擎可以扩展出很多ORM中的对象. from sqlalc ...
- Python SQLAlchemy入门教程
本文将以Mysql举例,介绍sqlalchemy的基本用法.其中,Python版本为2.7,sqlalchemy版本为1.1.6. 一. 介绍 SQLAlchemy是Python中最有名的ORM工具. ...
- SQLAlchemy详细教程
http://www.360doc.com/content/15/0914/16/360939_499094891.shtml
- 深入研究sqlalchemy连接池
简介: 相对于最新的MySQL5.6,MariaDB在性能.功能.管理.NoSQL扩展方面包含了更丰富的特性.比如微秒的支持.线程池.子查询优化.组提交.进度报告等. 本文就主要探索MariaDB当中 ...
- SQLAlchemy基本操作和常用技巧
点击打开链接 Python的ORM框架SQLAlchemy基本操作和常用技巧,包含大量实例,非常好的一个学习SQLAlchemy的教程,需要的朋友可以参考下 python编程语言下的一款开源软件.提供 ...
- SQLAlchemy ORM教程之二:Query
from:https://www.jianshu.com/p/8d085e2f2657 这是继SQLAlchemy ORM教程之一:Create后的第二篇教程.在上一篇中我们主要是解决了如何配置ORM ...
- SQlALchemy session详解
系列文章: Python SQLAlchemy入门教程 概念 session用于创建程序和数据库之间的会话,所有对象的载入和保存都需通过session对象 . 通过sessionmaker调用创建一个 ...
- Flask-SQLAlchemy 使用教程
Flask-SQLAlchemy ,是对SQLAlchemy进一步封装 SQLAlchemy使用教程地址: https://www.cnblogs.com/bigox/p/11552542.html ...
随机推荐
- freeswitch的任务引擎实现分析
概述 freeswitch核心框架中有一个定时任务系统,在开发过程中用来做一些延时操作和异步操作很方便. 我们在VOIP的呼叫流程中,经常会有一些对实时性要求没那么高的操作,或者会有阻塞流程的操作,我 ...
- Java笔记——选择语
Java笔记--选择语句 1. if语句 规律: 1. 首先计算表达式的值. 2. 若表达式为真,则执行对应语句,为假则不执行. 第一种: if(表达式) 语句;//多个语句可用{} 例如 ...
- 【C# 锁】 SpinLock锁 详细分析(包括内部代码)
OverView 同步基元分为用户模式和内核模式 用户模式:Iterlocked.Exchange(互锁).SpinLocked(自旋锁).易变构造(volatile关键字.volatile类.Thr ...
- Codeforces Round #750 (Div. 2) E. Pchelyonok and Segments
传送门 题目大意: 给一个序列,可以在这个序列中从左至右选若干个段,第i段的长度为i,对于任意的段i,段内元素和S[i]<S[i+1],求在该序列中最多可以选出几段. 思路:设dp[i][j]为 ...
- 走进第四范式:决策类AI企业的生存之道
根据不同的应用领域,人工智能行业可以分为视觉类人工智能.语音及语义类人工智能和决策类人工智能. 通常,我们接触的都是视觉类.语音类的人工智能,它们主要用来帮助人类执行具体任务,例如人脸识别,语音控制等 ...
- ElementUI Tree树形控件renderContent return时报错
问题描述: 使用Tree树形控件使用render-content渲染时return后报错或npm run dev时候报错,报错信息相同,如下: 问题分析: renderContent函数中需要使用js ...
- 接口自动化测试框架(Java 实现)
目录 需求分析 开发设计 分层与抽象 技术选型 主要类设计 测试文件设计 工程目录设计 工程实现 github 地址 运行示例 需求分析 需求点 需求分析 通过 yaml 配置接口操作和用例 后续新增 ...
- Sqlserver 2008 导出数据库
sqlserver2008中导出数据库: ①当数据库中的数据量比较大时,可使用备份的方法. 路径可以默认,想自定义就点击[添加],最后[确定]即可. ②当数据量不是很大时,可以采用导出SQL执行语句的 ...
- Wireshark抓包工具解析HTTPS包
目录 一.遇到的问题 二.解决方案 1. 动态生成签名证书 2. Wireshark配置 3. 最终效果 一.遇到的问题 本学期的计算机网络课程需要使用到Wireshark抓包工具进行网络抓包实验,原 ...
- LGP2233题解
题目大意 求环上走 \(n\) 步从指定点到达另一指定点,到达指定点后 不得继续移动. 大家都做过P1057传球游戏吧?还记得这道题的思路吗? 设 \(dp[i][j]\) 表示传 \(i\) 次求传 ...