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))
```
我的笔记