SQLAlchemy 使用教程

前戲:

​ 不用懷疑,你確定用過Django中的orm,這個orm框架是django框架中本身封裝的,在Django中配置和使用較爲簡單,可是並不適用於其餘web框架,而今天說的sqlalchemy是兼容python語言的orm框架,相信你已經明白誰牛逼!python

下面,接下來....mysql

​ 還有比案例更好的教程嗎,那下面請您享用爲您準備好的大餐...web

1.單表操做

1.1建立表

  • 導入sqlachemy資源包sql

  • 案例數據庫

    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(增刪改查)

  • 案例django

    # 模擬 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

  • 使用案例session

    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 建立表

  • 案例app

    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))
相關文章
相關標籤/搜索