+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

SQLAlchemy 中执行原生 SQL 语句

有些操作使用SQLAlchemy框架里的 query, add, update, delete 操作就可以完成,但有些任务使用框架里的 CRUD 操作会很复杂,远没有直接执行原生 SQL 语句方便。前提是,熟悉掌握 SQL 语句的语法。 例如,表 user 里有个字段是 score,每次被点赞该字段的值就要加1,如果用 SQLAlchemy 的 CRUD 就会很麻烦,但是用原生 SQL 就非常简单: ``` update user set score=score+1 where id=123; ``` 那 SQLAlchemy 如何执行原生 SQL 呢? ``` from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import scoped_session from sqlalchemy import create_engine __engine = create_engine("mysql+pymysql://x:x@127.0.0.1:3306/x?charset=utf8mb4, pool_size=5, max_overflow=0) @contextmanager def session_maker(): db_session = scoped_session(__engine) try: yield db_session db_session.commit() except BaseException as e: db_session.rollback() print(e) finally: db_session.close() def dao_update_score(uid): with session() as session_maker: db_session.execute("update user set score=score+1 where id={};".format(uid)) ```
我的笔记