python mysql sqlalchemy orm 使用

sqlalchemy orm关系框架

pip install sqlacodegen  #将表生成对应的类
pip install mysqlclient
pip install sqlalchemy 

1、参考

Python-SQLAlchemy:第1节:SQLAlchemy入门
Python-SQLAlchemy:第2节:查询条件设置
Python-SQLAlchemy:第3节:关系操作
Python-SQLAlchemy:第4节:级联

2、映射关系类

from sqlalchemy import Column, String, Integer, Float, or_, TEXT
from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, ForeignKey, String
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base
# 创建对象的基类:
Base = declarative_base()


class Class(Base):
    __tablename__ = 'class'
    class_id = Column(Integer, primary_key=True,autoincrement=True)
    name = Column(String(50)) 
    level = Column(Integer)
    address = Column(Text) 

可使用 sqlacodegen 工具生成

sqlacodegen mysql+pymysql://root:[email protected]:3306/zentao  --outfile tt.py

sqlalchemy 使用

生成close工具类

from sqlalchemy.orm import sessionmaker, Session
from sqlalchemy import create_engine
from test.mysql.mysql_tables import MyTable,Class,Student

class DbOrm:

    def __init__(self):
        engine = create_engine('mysql+pymysql://root:[email protected]:3306/zentao',
                               echo_pool=True,
                               pool_pre_ping=True)
        # 创建 DBSession 类型:
        self.dbSession = sessionmaker(bind=engine)

    def __enter__(self) -> Session:
        """

        :return:
        """
        self.session = self.dbSession()
        return self.session

    def __exit__(self, type, value, trace):
        self.session.commit()
        self.session.close()

    @staticmethod
    def getOrmSession(func):
        def wrapper(*args, **kw):
            with DbOrm() as db:
                result = func(db, *args, **kw)
            return result

        return wrapper


@DbOrm.getOrmSession
def testFind(session):
    res = session.query(MyTable).all()
    for u in res:
        print(u.id, u.name, u.name)


# testFind()


@DbOrm.getOrmSession
def testDel(session):
    res = session.query(MyTable).filter(MyTable.id == 1).delete()  # 删除否合条件的数据,返回删除数量
    print(res)


# testDel()


@DbOrm.getOrmSession
def testAdd(session):
    table = MyTable(name="bb", count=1)
    print(table)
    res = session.add(table)
    print(res)


# testAdd();

@DbOrm.getOrmSession
def testUpdate(session):
    data = {}
    data["name"] = "ccc";
    query_filter = session.query(MyTable).filter(MyTable.id == 2)
    res = query_filter.update(data)
    print(res)


# testUpdate();


@DbOrm.getOrmSession
def testJoin(session):
    res = session.query(Class, MyTable).outerjoin(MyTable, Class.class_id == MyTable.id).filter(Class.class_id ==2).one()
    print(res.Class.class_id,res.MyTable.id)

# testJoin();

@DbOrm.getOrmSession
def testAdd2(session):
    # 添加
    # table = MyTable(name="bb", count=1)
    # print(table)
    # res = session.add(table)
    # print(res)
    # class_ = Class(name="11",level=1,address="aaaa")
    # res=session.add(class_)
    # print(res)
    # student3 = Student(name="11",age=5)
    # session.class_id=1
    # session.class_=class_
    # session.add(student3)

    # 关联查询
    # res=session.query(Class).filter(Class.class_id==1).one();
    # print(res.name)
    # for item in res.students:
    #     print(item.name)
    # res=session.query(Student).filter(Student.student_id==1).all();
    # for item in res:
    #     print(item.class_.name)

    # 修改信息
    res = session.query(Class).filter(Class.class_id == 1);
    res1=res.update({"name":"1111aaa"})
    print(res1)

# testAdd2()




你可能感兴趣的:(python mysql sqlalchemy orm 使用)