当前位置:   article > 正文

SqlAlchemy的Engine,Connection和Session 区别?适合什么时候用?_sqlalchemy session connection

sqlalchemy session connection

一个熟练使用过SQLAlchemy的程序员,执行同一个SQL指令应该尝试过以下三种方式:

连接到数据库,获取对象

  1. engine = create_engine("parameter)
  2. connection=engine.connection()
  3. session_bind=sessionmaker(bind=engine)
  4. session=session_bind()

Engine处理

  1. #Engine:
  2. engine.execute(select([table])).fetchall()

connection处理

  1. #connection
  2. connection.execute(select([table])).fetchall()

session处理

  1. #session
  2. session.execute(select([table])).fetchall()

虽然使用的方式不同,但是产生的结果都是同样的;为什么呢?

要搞懂这个,就需要知道Executable类,Executable是所有select(),delete(),update(),insert(),text()等对象的超类,它可以支持所有的SQL表达式;在数据库层面来看,使用它们三个就是同一回事儿;详情可以搜索Executable类

 

何时使用Engine,connection,session?

1,Engine是SQLAlchemy中连接数据库最底层级别的对象,它维护了一个连接池,可以在应用程序需要和数据库对话时使用。在Engine.execute(close_with_result=True) close_with_result=True 表示连接自动关闭;

官方文档用法:点击此处

例如代码:

  1. result = engine.execute('SELECT * FROM tablename;')
  2. conn = engine.connect(close_with_result=True)
  3. result = conn.execute('SELECT * FROM tablename;')
  4. for row in result:
  5. print(result['columnname']
  6. result.close()

2,Connection,实际上是执行SQL查询的工作,每当你想更好的控制连接的属性,如何时关闭等都建议使用这个操作;比如在一个事务中,要控制它提交commit的时间,在connection控制中就可以运行多个不同的SQL语句,如果其中一个出现问题,则其他所有的语句都会撤销更改;

例如代码:

  1. connection = engine.connect()
  2. trans = connection.begin()
  3. try:
  4. connection.execute("INSERT INTO films VALUES ('Comedy', '82 minutes');")
  5. connection.execute("INSERT INTO datalog VALUES ('added a comedy');")
  6. trans.commit()
  7. except:
  8. trans.rollback()
  9. raise

3,Session,一般都是用于ORM中,因为在ORM中,会自动生成SQL语句以及自动连接数据库(自己配置),使用session.execute()也是个编辑的方法,可以将会话绑定到任何对象;如果你确定使用ORM,就建议使用session来处理execute(),否则还是使用connection更好方便;

总结

从应用角度来看,可以把这三类分为两种:

1,直接使用Engine.execute( ) 或Connection.execute( ),更加灵活,可以使用原生SQL语句;

2,使用Session处理交易类型的数据,因为方便使用session.add(),session.rollback(),session.commit(),session.close()等,它是使用ORM时推荐的一种和数据库交互的方式;

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/230713
推荐阅读
相关标签
  

闽ICP备14008679号