前戏:

​ 不用怀疑,你肯定用过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 使用教程的更多相关文章

  1. Flask 中的 SQLAlchemy 使用教程

    Flask 是一个 python web micro framework.所谓微框架,主要是 flask 简洁与轻巧,自定义程度高.相比 django 更加轻量级. 之前一直折腾 django,得益于 ...

  2. sqlalchemy基础教程

    一.基本配置 连接数据库 外部连接数据库时,用于表名数据库身份的一般是一个URL.在sqlalchemy中将该URL包装到一个引擎中,利用这个引擎可以扩展出很多ORM中的对象. from sqlalc ...

  3. Python SQLAlchemy入门教程

    本文将以Mysql举例,介绍sqlalchemy的基本用法.其中,Python版本为2.7,sqlalchemy版本为1.1.6. 一. 介绍 SQLAlchemy是Python中最有名的ORM工具. ...

  4. SQLAlchemy详细教程

    http://www.360doc.com/content/15/0914/16/360939_499094891.shtml

  5. 深入研究sqlalchemy连接池

    简介: 相对于最新的MySQL5.6,MariaDB在性能.功能.管理.NoSQL扩展方面包含了更丰富的特性.比如微秒的支持.线程池.子查询优化.组提交.进度报告等. 本文就主要探索MariaDB当中 ...

  6. SQLAlchemy基本操作和常用技巧

    点击打开链接 Python的ORM框架SQLAlchemy基本操作和常用技巧,包含大量实例,非常好的一个学习SQLAlchemy的教程,需要的朋友可以参考下 python编程语言下的一款开源软件.提供 ...

  7. SQLAlchemy ORM教程之二:Query

    from:https://www.jianshu.com/p/8d085e2f2657 这是继SQLAlchemy ORM教程之一:Create后的第二篇教程.在上一篇中我们主要是解决了如何配置ORM ...

  8. SQlALchemy session详解

    系列文章: Python SQLAlchemy入门教程 概念 session用于创建程序和数据库之间的会话,所有对象的载入和保存都需通过session对象 . 通过sessionmaker调用创建一个 ...

  9. Flask-SQLAlchemy 使用教程

    Flask-SQLAlchemy ,是对SQLAlchemy进一步封装 SQLAlchemy使用教程地址: https://www.cnblogs.com/bigox/p/11552542.html ...

随机推荐

  1. Tabluea、Smartbi可视化仪表盘创建流程图分享

    你知道Tableau.Smartbi在可视化仪表盘制作步骤上有何差异吗?下面一起来了解吧~ 根据上面的流程图我们可以了解到,不同于Smartbi是在同一界面即可完成的,Tableau是由很多个工作表组 ...

  2. 自助BI工具:Tableau和Smartbi的对比(上)

    商业智能(BI)和分析平台长期以来一直是商业的重要组成部分,但由于自助BI工具的兴起,在数据科学家和数据库管理员的支持下,分析的责任已经从IT转移到了商业分析师身上. 因此,BI已经从生成月度报告的记 ...

  3. 广州市首批!Smartbi入库信创产品资源池,引领国产BI软件崛起

    为贯彻落实软件高质量发展战略,加快建设有影响力的信息技术创新(简称"信创")资源池,广州市工业和信息化局经征集申报.专家评审.现场考察等多个环节,发布了"广州市信息技术应 ...

  4. [gRPC via C#] gRPC本质的探究与实践

    鉴于内容过多,先上太长不看版: grpc 就是请求流&响应流特殊一点的 Http 请求,性能和 WebAPI 比起来只快在 Protobuf 上: 附上完整试验代码:GrpcWithOutSD ...

  5. 【C#表达式树 五】工厂模式创建表达式树节点

    常量 1.值常量  (p)=>100+88+p ParameterExpression par = Expression.Parameter(typeof(int), "p" ...

  6. VUE3 之 使用标签实现动画与过渡效果 - 这个系列的教程通俗易懂,适合新手

    1. 概述 巴纳姆效应告诉我们: 人们更容易相信笼统的.常见的人格描述,并觉得特别适合自己,认为该描述真实地反映了自己的人格面貌. 这也是所有算命先生的小把戏,算命先生通常把话说的很笼统,很通用,基本 ...

  7. xlrd》操作excel 出现的问题:File "D:\python37\lib\site-packages\xlrd\formula.py", line 1150, in evaluate_name_formula assert len(tgtobj.stack) == 1

    xlrd>操作excel  出现的问题 报错如下: D:\python37\python.exe D:/testWang/waimai/tools/get_excelData.py*** for ...

  8. JZ-006-旋转数组的最小数字

    旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. NOTE:给出的所有元素都大于0,若数组 ...

  9. Elasticsearch-CentOS7单机安装测试

    排版比较丑,但按照此步骤执行一定会搭建成功. 一.环境描述及准备 1.下载Elasticsearch包 curl -L -O https://artifacts.elastic.co/download ...

  10. Angular + asp.net core 入门

    一.简介 通俗的理解,Angular 只是一个前端框架,它只负责前端的事,但一个完整的项目还应该有后端,这其中之一可选的技术就是 asp.net core .这里简单学习一下两个框架之间的协同开发. ...