zoukankan      html  css  js  c++  java
  • SQLAlchemy的使用

    SQLAlchemy是什么

    SQLAlchemy是一款开源的ORM工具,与Django的Model相比兼容性更强。  

    如何创建数据库表结构

    0,你得先创建一个数据库

    1,创建数据库对象,ORM的含义就是对象关系映射,也就是说通过对象来控制数据表。

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column,Integer,String    #INTEGER和Integer作用相同
    
    Base = declarative_base()    #Base就是实例化的ORM模型
    class User(Base):    #相当于Django的Model
    __tablename__="user"    #__tablename__是关键字,设置表名
    id = Column(Integer,primary_key = True,autoincrement=True)
    name = Column(String(32),index=True)

    2,连接数据库,不连接数据库,仅仅创建一个类是没有任何意义的

    from sqlalchemy import create_engine
    engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/123?charset=utf8") 
    Base.metadata.create_all(engine)

    增删改查之增

    1,使用User ORM模型创建一条数据。

    user1 = User(name = "斋藤飞鸟")

    2,把数据写入数据库。

    from sqlalchemy.orm import sessionmaker    #sessionaaker是用来创建数据库会话的
    
    session = sessionmaker(engine)#上文创建的连接
    db_session = session()    #打开 会话对象
    db_session.add(user1)    #在会话中添加数据
    
    db_session.commit()    #提交所有对db_session的操作
    db_session.close()  #关闭会话
    #多条数据的添加和单条一样操作是可行的,也可以使用db_session对象有一个add_all方法,接收可迭代对象如元组列表等,4

    增删改查之查

    1,简单查询

    all_user_list1 = db_session.query(User).all()
    for i in all_user_list:
        print(i.id,i.name)

    2,高级查询

    user_list1 = db_session.query(User).filter(User.id>2).all()  #查询大于2的数据  
    user1= db_session.query(User).filter(User.id>2).frist()    #查询第一条数据
    
    #在sqlalchemy中and表示的是如果前一个条件为真那么不考虑后面的条件,or表示的是如果前面的条件为真,后面的条件也为真,那么前面的条件会被覆盖
    db_session.query(User).filter(User.id>2 and User.name == "斋藤飞鸟").all()  #查询大于2的数据
    db_session.query(User).filter(User.id>2 or User.name == "斋藤飞鸟").all()  #查询name为斋藤飞鸟的数据
    
    #在sqlalchemy中的 _and 和 _or表示与和或
    db_session.query(User).filter(and_(User.id>2 , User.name == "斋藤飞鸟")).all() 
    db_session.query(User).filter(or_User.id>2 ,User. name == "斋藤飞鸟")).all() 
    
    #查询时顺便起别名
    db.session.query(User.name.label("username")).filter(User.name=="斋藤飞鸟")
    
    #原生SQL条件,使用filter_by
    db.session.query(User).filter_by("username=斋藤飞鸟")
    
    #排序 order_by
    db_session.query(User).order_by(User.id.desc()).all()    #倒序
    db_session.query(User).order_by(User.id.desc()).all()    #正序
    
    #分组 group_by
    db_session.query(User).group_by(User.id).all()    
    
    #模糊查询
    db_session.query(User).filter(User.name.like("飞鸟")).all()  
    
    #复杂查询
    from sqlalchemy import text
    db_session.query(User).filter(text("select * from User.id<:value and name = :name")).params(value=3,name="飞鸟") 

    增删改查之改

    #直接修改
    db_session.query(User).filter(User.id > 0).update({"name" : "斋藤飞鸟卡哇伊"})
    
    #在原有值基础上添加 
    db_session.query(User).filter(User.id > 0).update({User.name: User.name + "卡哇伊"}, synchronize_session=False)

    增删改查之删

     db_session.query(User).filter(User.id==2).delete()

    跨表操作

    使用跨表操作之前需要在建表时声明外键关联

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column,Integer,String    #INTEGER和Integer作用相同
    from sqlalchemy import create_engine
    
    Base = declarative_base()    #Base就是实例化的ORM模型
    class User(Base):    #相当于Django的Model
    __tablename__="user"    #__tablename__是关键字,设置表名
    id = Column(Integer,primary_key = True,autoincrement=True)
    name = Column(String(32),index=True)
    
    from SQLalchemy.ext.declarative import declarative_base
    from SQLAlchemy import Column,Integer,String    #INTEGER和Integer作用相同
    
    Base = declarative_base()    #Base就是实例化的ORM模型
    class User_friends(Base):    #相当于Django的Model
    __tablename__="uf"    #__tablename__是关键字,设置表名
    id = Column(Integer,primary_key = True,autoincrement=True)
    name = Column(String(32),index=True)
    user_id = Column(Integer,Foreignkey("user.id"))
    friend_relat = relationship("User",backref = "friend")
    
    engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/123?charset=utf8")

    跨表的增删改查就不赘述了,就是通过外间字段名或定义的backref来进行操作。

  • 相关阅读:
    Flask websocket
    Vuex
    Web框架的原理
    node.js
    nginx负载均衡实验
    nginx与location语法详解
    git安装与初始化
    Flask 中的 Render Redirect HttpResponse
    jQuery快速入门
    前端知识总结--css用div画环形圆
  • 原文地址:https://www.cnblogs.com/cuiyuanzhang/p/9566989.html
Copyright © 2011-2022 走看看