zoukankan      html  css  js  c++  java
  • SQLAlchemy 增删改查 一对一 多对多

    首先要导入SQLAIchemy模块

    from sqlalchemy.ect.declaative import  declarative_base

    创建orm基类

    Base = declarative_base()

    创建orm对象

    class User(Base):
        __tablename__ = "user"
        
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32),index=True)

    创建数据库链接

    from sqlalchemy import create_engine
    ngine = create_engine("mysql+pymysql://root:pwd@127.0.0.1:3306/user?charset=utf8")
    备注:pwd表示密码,如果数据库属性中没有密码的话可以忽略,user是数据库名
    # 数据库链接创建完成
    # 去数据库中创建与User所对应的数据库表
    # 去engine数据库中创建继承Base类所对应的数据表
    Base.metadata.create_all(engine)

    #############################################################################################################################

    添加数据

    首先打开数据库链接

    from sqlalchemy import create_engine
    engine = create_engine("mysql+pymysql://root:pwd@127.0.0.1:3306/user?charset=utf8")

    创建会话窗口---打开数据库链接

    from sqlalchemy.orm import  sessionmaker

    创建会话

    Session = sessionmaker(engine)

    打开会话窗口

    db_session = Session()

    添加单条数据

    user_obj=  User(name="ywb")
    db_session.add(user_obj)

    添加多条数据

    db_session.add_all([
        User(name="Alex"),
        User(name="Wusir"),
        User(name="Yuan")
    
    ])

    开始执行操作

       db_session.commit()

    执行完成之后关闭执行命令

    db_session.close()

    查询数据

     1 # 创建会话窗口
     2 from sqlalchemy.orm import sessionmaker
     3 from creat_table import engine,User
     4 
     5 Session = sessionmaker(engine)
     6 db_session = Session()
     7 
     8 
     9 # 简单的查询语句
    10 user_list = db_session.query(User).all()
    11 for row in user_list:
    12     print(row.id,row.name)
    13 
    14 # 单条查询
    15 user = db_session.query(User).first()
    16 print(user.id,user.name)
    17 
    18 
    19 # 带条件的查询
    20 user_list = db_session.query(User).filter(User.id==4).all()
    21 print(user_list[0].id,user_list[0].name)
    22 
    23 user = db_session.query(User).filter_by(id=3).first()
    24 print(user.id,user.name)
    25 
    26 user_list = db_session.query(User).filter(User.id>=2).all()
    27 for row in user_list:
    28     print(row.id,row.name)
    29 
    30 
    31 # 查询sql语句(拓展)
    32 sql = db_session.query(User).filter(User.id>=2)
    33 print(sql)
    查询数据

    修改更新数据

     1 #修改数据
     2 
     3 
     4 # 建立会话
     5 from sqlalchemy.orm import sessionmaker
     6 # 导入链接数据库的模块
     7 from creat_table import engine,User
     8 # 开始创建会话
     9 Session = sessionmaker(engine)
    10 # 开启会话
    11 db_session = Session()
    12 
    13 # 开始修改数据
    14 res = db_session.query(User).filter(User.name=="ybw").update({"name":"哈哈哈"})
    15 print(res)
    16 
    17 db_session.commit()
    18 db_session.close()
    修改更新数据

    删除数据

     1 #删除数据
     2 
     3 
     4 from sqlalchemy.orm import sessionmaker
     5 from creat_table import engine,User
     6 
     7 Session = sessionmaker(engine)
     8 db_session = Session()
     9 
    10 
    11 # 删除
    12 
    13 res = db_session.query(User).filter(User.id ==4 ).delete()
    14 print(res)
    15 
    16 db_session.commit()
    17 db_session.close()
    删除数据

    建立一对多:的ForeignKey关系实现的增删改查

    创建数据库

     1 #一对多操作
     2 
     3 
     4 from sqlalchemy.ext.declarative import declarative_base
     5 
     6 Base = declarative_base()
     7 
     8 from sqlalchemy import Column,String,Integer,ForeignKey
     9 from sqlalchemy.orm import relationship
    10 
    11 class Student(Base):
    12     __tablename__ = "student"
    13     id = Column(Integer,primary_key=True)
    14     name = Column(String(32))
    15     school_id = Column(Integer,ForeignKey("school.id"))
    16 
    17     stu2sch = relationship("School",backref = "sch2stu")
    18 
    19 class School(Base):
    20     __tablename__ = "school"
    21     id = Column(Integer,primary_key=True)
    22     name = Column(String(32))
    23 
    24 
    25 from sqlalchemy import create_engine
    26 engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/day127?charset=utf8")
    27 Base.metadata.create_all(engine)
    创建数据库

    添加数据

     1 #   添加数据
     2 
     3 
     4 from sqlalchemy.orm import sessionmaker
     5 from creat_table_ForeignKey import engine,Student,School
     6 
     7 Session = sessionmaker(engine)
     8 db_session = Session()
     9 
    10 ## 添加数据   原始方法
    11 sch_obj = School(name="OldBoyBeijing")
    12 db_session.add(sch_obj)
    13 db_session.commit()
    14 sch = db_session.query(School).filter(School.name =="OldBoyBeijing").first()
    15 stu_obj = Student(name="Yuan",school_id=sch.id)
    16 db_session.add(stu_obj)
    17 db_session.commit()
    18 db_session.close()
    19 
    20 # 添加数据  反向添加 relationship
    21 
    22 sch_obj = School(name="OldBoyShanghai")
    23 sch_obj.sch2stu = [Student(name="江疏影"),Student(name="周冬雨"),]
    24 db_session.add(sch_obj)
    25 db_session.commit()
    26 db_session.close()
    27 
    28 
    29 # 添加数据 正向添加   relationship
    30 stu_obj = Student(name="大黄鸭",stu2sch = School(name="OldBoyShenzhen"))
    31 db_session.add(stu_obj)
    32 db_session.commit()
    33 db_session.close()
    添加数据

    查询数据

     1 #   查询数据
     2 
     3 
     4 from sqlalchemy.orm import sessionmaker
     5 from creat_table_ForeignKey import engine,Student,School
     6 
     7 Session = sessionmaker(engine)
     8 db_session = Session()
     9 
    10 # #1.查询数据  正向查询数据  relationship
    11 stu = db_session.query(Student).all()
    12 for row in stu:
    13     print(row.id,row.name,row.school_id,row.stu2sch.name)
    14 
    15 
    16 # #1.查询数据  反向查询数据  relationship
    17 
    18 sch = db_session.query(School).all()
    19 for school in sch:
    20     for student in school.sch2stu:
    21         print(school.id,school.name,student.name)
    查询数据

     修改数据

     1 #   更新数据
     2 
     3 
     4 from sqlalchemy.orm import sessionmaker
     5 from creat_table_ForeignKey import engine,Student,School
     6 
     7 Session = sessionmaker(engine)
     8 db_session = Session()
     9 
    10 # 修改数据
    11 
    12 sch = db_session.query(School).filter(School.name=="OldBoyShanghai").first()
    13 db_session.query(Student).filter(Student.name == "大黄鸭").update({"school_id":sch.id})
    14 db_session.commit()
    15 db_session.close()
    修改数据

    删除数据

     1 #   删除数据
     2 
     3 
     4 from sqlalchemy.orm import sessionmaker
     5 from creat_table_ForeignKey import engine,Student,School
     6 
     7 Session = sessionmaker(engine)
     8 db_session = Session()
     9 
    10 # 删除数据
    11 
    12 sch = db_session.query(School).filter(School.name=="OldBoyShanghai").first()
    13 db_session.query(Student).filter(Student.school_id == sch.id).delete()
    14 db_session.commit()
    15 db_session.close()
    删除数据

    高级版的查询操作

      1 # 高级版查询操作,厉害了哦
      2 #老规矩
      3 from my_create_table import User,engine
      4 from sqlalchemy.orm import sessionmaker
      5 
      6 Session = sessionmaker(engine)
      7 db_session = Session()
      8 
      9 # 查询数据表操作
     10 # and or
     11 from sqlalchemy.sql import and_ , or_
     12 ret = db_session.query(User).filter(and_(User.id > 3, User.name == 'DragonFire')).all()
     13 ret = db_session.query(User).filter(or_(User.id < 2, User.name == 'DragonFire')).all()
     14 
     15 # 查询所有数据
     16 r1 = db_session.query(User).all()
     17 
     18 # 查询数据 指定查询数据列 加入别名
     19 r2 = db_session.query(User.name.label('username'), User.id).first()
     20 print(r2.id,r2.username) # 15 NBDragon
     21 
     22 # 表达式筛选条件
     23 r3 = db_session.query(User).filter(User.name == "DragonFire").all()
     24 
     25 # 原生SQL筛选条件
     26 r4 = db_session.query(User).filter_by(name='DragonFire').all()
     27 r5 = db_session.query(User).filter_by(name='DragonFire').first()
     28 
     29 # 字符串匹配方式筛选条件 并使用 order_by进行排序
     30 r6 = db_session.query(User).filter(text("id<:value and name=:name")).params(value=224, name='DragonFire').order_by(User.id).all()
     31 
     32 #原生SQL查询
     33 r7 = db_session.query(User).from_statement(text("SELECT * FROM User where name=:name")).params(name='DragonFire').all()
     34 
     35 # 筛选查询列
     36 # query的时候我们不在使用User ORM对象,而是使用User.name来对内容进行选取
     37 user_list = db_session.query(User.name).all()
     38 print(user_list)
     39 for row in user_list:
     40     print(row.name)
     41 
     42 # 别名映射  name as nick
     43 user_list = db_session.query(User.name.label("nick")).all()
     44 print(user_list)
     45 for row in user_list:
     46     print(row.nick) # 这里要写别名了
     47 
     48 # 筛选条件格式
     49 user_list = db_session.query(User).filter(User.name == "DragonFire").all()
     50 user_list = db_session.query(User).filter(User.name == "DragonFire").first()
     51 user_list = db_session.query(User).filter_by(name="DragonFire").first()
     52 for row in user_list:
     53     print(row.nick)
     54 
     55 # 复杂查询
     56 from sqlalchemy.sql import text
     57 user_list = db_session.query(User).filter(text("id<:value and name=:name")).params(value=3,name="DragonFire")
     58 
     59 # 查询语句
     60 from sqlalchemy.sql import text
     61 user_list = db_session.query(User).filter(text("select * from User id<:value and name=:name")).params(value=3,name="DragonFire")
     62 
     63 # 排序 :
     64 user_list = db_session.query(User).order_by(User.id).all()
     65 user_list = db_session.query(User).order_by(User.id.desc()).all()
     66 for row in user_list:
     67     print(row.name,row.id)
     68 
     69 #其他查询条件
     70 """
     71 ret = session.query(User).filter_by(name='DragonFire').all()
     72 ret = session.query(User).filter(User.id > 1, User.name == 'DragonFire').all()
     73 ret = session.query(User).filter(User.id.between(1, 3), User.name == 'DragonFire').all() # between 大于1小于3的
     74 ret = session.query(User).filter(User.id.in_([1,3,4])).all() # in_([1,3,4]) 只查询id等于1,3,4的
     75 ret = session.query(User).filter(~User.id.in_([1,3,4])).all() # ~xxxx.in_([1,3,4]) 查询不等于1,3,4的
     76 ret = session.query(User).filter(User.id.in_(session.query(User.id).filter_by(name='DragonFire'))).all() 子查询
     77 from sqlalchemy import and_, or_
     78 ret = session.query(User).filter(and_(User.id > 3, User.name == 'DragonFire')).all()
     79 ret = session.query(User).filter(or_(User.id < 2, User.name == 'DragonFire')).all()
     80 ret = session.query(User).filter(
     81     or_(
     82         User.id < 2,
     83         and_(User.name == 'eric', User.id > 3),
     84         User.extra != ""
     85     )).all()
     86 # select * from User where id<2 or (name="eric" and id>3) or extra != "" 
     87 
     88 # 通配符
     89 ret = db_session.query(User).filter(User.name.like('e%')).all()
     90 ret = db_session.query(User).filter(~User.name.like('e%')).all()
     91 
     92 # 限制
     93 ret = db_session.query(User)[1:2]
     94 
     95 # 排序
     96 ret = db_session.query(User).order_by(User.name.desc()).all()
     97 ret = db_session.query(User).order_by(User.name.desc(), User.id.asc()).all()
     98 
     99 # 分组
    100 from sqlalchemy.sql import func
    101 
    102 ret = db_session.query(User).group_by(User.extra).all()
    103 ret = db_session.query(
    104     func.max(User.id),
    105     func.sum(User.id),
    106     func.min(User.id)).group_by(User.name).all()
    107 
    108 ret = db_session.query(
    109     func.max(User.id),
    110     func.sum(User.id),
    111     func.min(User.id)).group_by(User.name).having(func.min(User.id) >2).all()
    112 """
    113 
    114 # 关闭连接
    115 db_session.close()
    116 
    117 orm_select_more
    高级版查询操作

     高级修改数据操作

     1 #高级版更新操作
     2 from my_create_table import User,engine
     3 from sqlalchemy.orm import sessionmaker
     4 
     5 Session = sessionmaker(engine)
     6 db_session = Session()
     7 
     8 #直接修改
     9 db_session.query(User).filter(User.id > 0).update({"name" : "099"})
    10 
    11 #在原有值基础上添加 - 1
    12 db_session.query(User).filter(User.id > 0).update({User.name: User.name + "099"}, synchronize_session=False)
    13 
    14 #在原有值基础上添加 - 2
    15 db_session.query(User).filter(User.id > 0).update({"age": User.age + 1}, synchronize_session="evaluate")
    16 db_session.commit()
    17 
    18 orm_update_more
    高级修改操作

    建立多对多:的ManyToMany

    创建表关系:

     1 from sqlalchemy.ext.declarative import declarative_base
     2 
     3 Base = declarative_base()
     4 
     5 from sqlalchemy import Column,Integer,String,ForeignKey
     6 from sqlalchemy.orm import relationship
     7 
     8 class Hotel(Base):
     9     __tablename__="hotel"
    10     id=Column(Integer,primary_key=True)
    11     girl_id = Column(Integer,ForeignKey("girl.id"))
    12     boy_id = Column(Integer,ForeignKey("boy.id"))
    13 
    14 class Girl(Base):
    15     __tablename__="girl"
    16     id=Column(Integer,primary_key=True)
    17     name = Column(String(32),index=True)
    18 
    19     #创建关系
    20     boys = relationship("Boy",secondary="hotel",backref="girl2boy")
    21 
    22 
    23 class Boy(Base):
    24     __tablename__="boy"
    25     id=Column(Integer,primary_key=True)
    26     name = Column(String(32),index=True)
    27 
    28 
    29 from sqlalchemy import create_engine
    30 engine = create_engine("mysql+pymysql://root:DragonFire@127.0.0.1:3306/dragon?charset=utf8")
    31 
    32 Base.metadata.create_all(engine)
    33 
    34 my_M2M.py
    35 
    36 my_M2M.py
    创建表关系

    基于relationship增加数据:

     1 from my_M2M import Girl,Boy,Hotel,engine
     2 
     3 # 创建连接
     4 from sqlalchemy.orm import sessionmaker
     5 # 创建数据表操作对象 sessionmaker
     6 DB_session = sessionmaker(engine)
     7 db_session = DB_session()
     8 
     9 # 1.通过Boy添加Girl和Hotel数据
    10 boy = Boy(name="DragonFire")
    11 boy.girl2boy = [Girl(name="赵丽颖"),Girl(name="Angelababy")]
    12 db_session.add(boy)
    13 db_session.commit()
    14 
    15 # 2.通过Girl添加Boy和Hotel数据
    16 girl = Girl(name="珊珊")
    17 girl.boys = [Boy(name="Dragon")]
    18 db_session.add(girl)
    19 db_session.commit()
    20 
    21 orm_M2M_insert.py
    22 
    23 orm_M2M_insert.py
    基于relationship增加数据

    基于relationship查询数据:

     1 from my_M2M import Girl,Boy,Hotel,engine
     2 
     3 # 创建连接
     4 from sqlalchemy.orm import sessionmaker
     5 # 创建数据表操作对象 sessionmaker
     6 DB_session = sessionmaker(engine)
     7 db_session = DB_session()
     8 
     9 # 1.通过Boy查询约会过的所有Girl
    10 hotel = db_session.query(Boy).all()
    11 for row in hotel:
    12     for row2 in row.girl2boy:
    13         print(row.name,row2.name)
    14 
    15 # 2.通过Girl查询约会过的所有Boy
    16 hotel = db_session.query(Girl).all()
    17 for row in hotel:
    18     for row2 in row.boys:
    19         print(row.name,row2.name)
    20 
    21 orm_M2M_select.py
    22 
    23 orm_M2M_select.py
    基于relationship查询数据
  • 相关阅读:
    ASP.NET缓存全解析(系列)
    updateprogress用法技巧
    text与img对齐
    9款Firefox插件提高设计开发效率
    ASP.NET页面实时进行GZIP压缩优化
    如何收缩和删除SQL日志文件
    闲扯加班
    与大家分享一点游戏管理晋升的心得(完整版)
    FDS (Flex Data Services)
    和我老婆去旅游
  • 原文地址:https://www.cnblogs.com/wqzn/p/10385673.html
Copyright © 2011-2022 走看看