python数据库orm之sqlalchemy的excute执行方式
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine, Table, MetaData, Column, Integer, String def sqlalchemy_test(): engine = create_engine("mysql+pymysql://username:password@localhost:3306/database_name?charset=utf8", echo=True) meta = MetaData() test_table = Table("tb_test", meta, Column("id", Integer, primary_key=True, autoincrement=True), Column("name", String(255)) ) # 方式1 res_1 = engine.execute(test_table.select()) for re in res_1: # dosomething res_1.close() # 方式2 conn = engine.connect() res_2 = conn.execute(test_table.select()) for re in res_2: # dosomething res_2.close() # 方式3 session_db = sessionmaker(bind=engine) session = session_db() res_3 = session.execute(test_table.select()) for re in res_3: # dosomething session.close()
使用try,except捕获异常,有回滚操作的时候,建议使用以下方式:
class ThingOne(object): def go(self, session): session.query(FooBar).update({"x": 5}) class ThingTwo(object): def go(self, session): session.query(Widget).update({"q": 18}) def run_my_program(): session = Session() try: ThingOne().go(session) ThingTwo().go(session) session.commit() except: session.rollback() raise finally: session.close()