SQLAlchemy中的Session和db.session有什么区别?

hoo

在事件映射器级别的文档中,它说Session.add()不受支持,但是当我尝试在db.session.add(some_object)内部after_insert事件中运行时,例如:

def after_insert_listener(mapper, connection, user):
    global_group = Group.query.filter_by(groupname='global').first()
    a = Association(user,global_group)
    db.session.add(a)

event.listen(User, 'after_insert', after_insert_listener)

基本上,任何新用户都应该是global_group的一部分,因此我在after_insert事件中添加了它我尝试插入一个用户,然后将其检入数据库,并找到了用户记录和关联记录。

安德烈·阿劳霍(Andre Araujo)

让我们检查一下差异:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://///Users/dedeco/Documents/tmp/testDb.db'
db = SQLAlchemy(app)

>>>type(db.session)
<class 'sqlalchemy.orm.scoping.scoped_session'>

或者

from sqlalchemy import *
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

some_engine = create_engine('sqlite://///Users/dedeco/Documents/tmp/testDb.db')
Session = sessionmaker(bind=some_engine)
session = Session()

Base = declarative_base()

>>> type(session)
<class 'sqlalchemy.orm.session.Session'>

基本上区别是:

  • 第一种方法是使用为Flask框架开发的API,称为Flask-SQLAlchemy。如果要创建Flask应用程序,则可以选择该选项,因为Session的范围可以由您的应用程序自动管理。您有许多好处,例如用于建立与请求相关联的单个会话的基础结构,该基础结构被正确构造并在请求结束时被拆除。

  • 第二种方法是纯SQLAlchemy应用程序,因此,如果您使用库来连接特定数据库,则可以仅使用SQLAlchemy API,例如,用于命令行脚本,后台守护程序,GUI界面驱动的应用程序,等等。

因此,两种方式都可以添加,例如:

使用Flask-SQLAlchemy

class User(db.Model):
    __tablename__ = 'users'
    user_id = db.Column(db.Integer(), primary_key = True)
    user_name = db.Column(db.String(80), unique=True)
    def __init__(self, user_name):
        self.user_name = user_name

>>> db.create_all()
>>> u = User('user1')
>>> db.session.add(u)
>>> db.session.commit()
>>> users = db.session.query(User).all()
>>> for u in users:
...     print u.user_name
... 
user1

仅使用SQLAlchemy

class User(Base):
    __tablename__ = 'users'
    user_id = Column(Integer(), primary_key = True)
    user_name = Column(String(80), unique=True)

>>> u = User()
>>> u.user_name = 'user2'
>>> session.add(u)
>>> session.commit()
>>> users = session.query(User).all()
>>> for u in users:
...     print u.user_name
... 
user1
user2

意识到我在同一数据库中进行连接只是为了表明您可以使用多种方式添加。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Hibernate中的Session和Connection有什么区别?

来自分类Dev

echo $ _SESSION [“ column”]和row [“ column”]有什么区别?

来自分类Dev

Rails 4中的null_session和reset_session有什么区别?

来自分类Dev

php 中的 session_id()、session_create_id() 和 session_regenerate_id() 有什么区别?

来自分类Dev

在 tensorflow 中使用 session 和只使用 session 有什么区别

来自分类Dev

HttpContext.Current.Session和HttpContext.Current.Items有什么区别?

来自分类Dev

sceneView.delegate和sceneView.session.delegate有什么区别?

来自分类Dev

boto3.Session()。client和boto3.client有什么区别?

来自分类Dev

Session.get()和EntityManager.find()Hibernate之间有什么区别

来自分类Dev

“ as?”,“ as!”和“ as”有什么区别?

来自分类Dev

$ *和$ @有什么区别

来自分类Dev

$和〜有什么区别?

来自分类Dev

/ * ... * /和/ ** ... * /有什么区别

来自分类Dev

!=和<>有什么区别?

来自分类Dev

ö和ö有什么区别?

来自分类Dev

$ *和$ @有什么区别?

来自分类Dev

“ ==”和“ =〜”有什么区别?

来自分类Dev

= +和+ =有什么区别

来自分类Dev

$ @和$ *有什么区别

来自分类Dev

+ =和+有什么区别?

来自分类Dev

$ _和!$有什么区别?

来自分类Dev

\ 和 \\ 有什么区别

来自分类Dev

持久性USB Live Session和USB驱动器中已安装的Ubuntu之间有什么区别?

来自分类Dev

持久性USB Live Session和USB驱动器中已安装的Ubuntu之间有什么区别?

来自分类Dev

实现func urlSession(_ session:URLSession,didReceive挑战:URLAuthenticationChallenge之间有什么区别

来自分类Dev

XPath中.//和// *有什么区别?

来自分类Dev

Ruby中的“ &&”和“&”有什么区别

来自分类Dev

Pig中的`::`和`.`有什么区别?

来自分类Dev

magrittr中的%>%和%,%有什么区别?

Related 相关文章

  1. 1

    Hibernate中的Session和Connection有什么区别?

  2. 2

    echo $ _SESSION [“ column”]和row [“ column”]有什么区别?

  3. 3

    Rails 4中的null_session和reset_session有什么区别?

  4. 4

    php 中的 session_id()、session_create_id() 和 session_regenerate_id() 有什么区别?

  5. 5

    在 tensorflow 中使用 session 和只使用 session 有什么区别

  6. 6

    HttpContext.Current.Session和HttpContext.Current.Items有什么区别?

  7. 7

    sceneView.delegate和sceneView.session.delegate有什么区别?

  8. 8

    boto3.Session()。client和boto3.client有什么区别?

  9. 9

    Session.get()和EntityManager.find()Hibernate之间有什么区别

  10. 10

    “ as?”,“ as!”和“ as”有什么区别?

  11. 11

    $ *和$ @有什么区别

  12. 12

    $和〜有什么区别?

  13. 13

    / * ... * /和/ ** ... * /有什么区别

  14. 14

    !=和<>有什么区别?

  15. 15

    ö和ö有什么区别?

  16. 16

    $ *和$ @有什么区别?

  17. 17

    “ ==”和“ =〜”有什么区别?

  18. 18

    = +和+ =有什么区别

  19. 19

    $ @和$ *有什么区别

  20. 20

    + =和+有什么区别?

  21. 21

    $ _和!$有什么区别?

  22. 22

    \ 和 \\ 有什么区别

  23. 23

    持久性USB Live Session和USB驱动器中已安装的Ubuntu之间有什么区别?

  24. 24

    持久性USB Live Session和USB驱动器中已安装的Ubuntu之间有什么区别?

  25. 25

    实现func urlSession(_ session:URLSession,didReceive挑战:URLAuthenticationChallenge之间有什么区别

  26. 26

    XPath中.//和// *有什么区别?

  27. 27

    Ruby中的“ &&”和“&”有什么区别

  28. 28

    Pig中的`::`和`.`有什么区别?

  29. 29

    magrittr中的%>%和%,%有什么区别?

热门标签

归档