sqlalchemy模块——python的ORM数据库

介绍

ORM数据库,简单理解就是把数据库的表抽象成一个个类,对数据库进行增删改查的时候可以直接通过库中的属性进行访问,即用python抽象数据库,通过sqlalchemy自动转换成数据库sql语句执行,可以更专注于代码的实现,可以配合sqlacodegen直接映射已有的数据库表,实际操作的时候需要借助其他库,例如DRIVER='mysql+pymysql

新建session

from sqlalchemy import create_engine
from sqlalchemy.engine.url import URL
from sqlalchemy.orm import sessionmaker

from config import settings


def create_session(config):
    url = URL(
        drivername=config.DRIVER,
        username=config.USER,
        password=config.PASSWORD,
        host=config.HOST,
        port=config.PORT,
        database=config.DB,
    )
    engine = create_engine(url, echo=False)
    Session = sessionmaker(bind=engine)
    return Session()


def close_session(session):
    session.close()


msp_session = create_session(settings.DATABASE.CONFIG.MSP)
ob_session = create_session(settings.DATABASE.CONFIG.OB)

通过session进行数据库操作

  1. 记得导入创建好的session
  2. 查询一条
    res = msp_session.query(msp_Table.IftttRuleInfo).filter(msp_Table.IftttRuleInfo.id == rule_id).first()
  3. 查询所有
    res = msp_session.query(msp_Table.IftttRuleInfo).filter(msp_Table.IftttRuleInfo.id == rule_id).all()
  4. 更新
    res = msp_session.query(msp_Table.IftttRuleInfo).filter(msp_Table.IftttRuleInfo.id == rule_id).first()
    res.state = 1
    session.commit()  # 一定要提交,否则更新操作不生效
    
  5. join
    只有内连接或者左连接, 左外连接为outerjoin
sql = (
	msp_session.query(msp_Table.PushMarketSubTask)
	.join(msp_Table.IftttRuleTaskRelation, msp_Table.IftttRuleTaskRelation.send_task_id == msp_Table.PushMarketSubTask.task_id)
	.filter(msp_Table.IftttRuleTaskRelation.rule_id == rule_id)
)  # 这一步会生成sql, 可以打印出来看sql内容或者在创建session的时候create_engine(url, echo=True)
sql.all()  # 执行all()方法才会真正开始查询
  1. 表如何映射
    参考sqlacodegen直接映射已有的数据库表

posted on 2024-01-29 22:15  ishuangjin  阅读(79)  评论(0)    收藏  举报

导航