簡體   English   中英

金字塔事務管理器未提交更新

[英]pyramid transaction manager not committing on update

抱歉,我之前不太清楚,

編輯:我正在使用默認金字塔應用程序與sqlalchemy(后端:postgresql),生成使用

pcreate -s alchemy

所以我有與DBSession,pyramid_tm等有關的所有設置。我有這段代碼

class User(Base):
    id = Column(Integer, primary_key=True)
    connection = relationship("UserConnection", uselist=False, backref="user")

class UserConnection(Base):
    userid = Column(Integer, ForeignKey('user.id'), primary_key=True)
    friends = Column(JSON)

def add_connection(user, friend):
    with transaction.manager:
        if not user.connection:
            user_conn = UserConnection(userid=user.id, friends=[])
        else:
            user_conn = user.connection

        user_conn.friends.append(friend)
        print(user_connection.friends)
        session.add(user_conn)

當我第一次運行add_connection()時,user.connection不存在。 創建了新記錄,但是在下次運行時(如果轉到其他位置)記錄不會更新,在控制台上,我只能看到ROLLBACK / COMMIT,而沒有其他語句。

那里的打印語句顯示了更新的結果,但是db沒有更新。

您應該在請求范圍內使用事務。

zope.sqlalchemy和pyramid_tm可以為您做到這一點。 您可以使用我的代碼:

pyramid_sqlalchemy.py

# -*- coding: utf-8 -*-

""" Pyramid sqlalchemy lib.

Session will be available as dbsession attribute on request.

! Do not close session on your own.

"""

import sqlalchemy
from sqlalchemy.orm import sessionmaker, scoped_session
from zope.sqlalchemy import ZopeTransactionExtension

Session = scoped_session(sessionmaker(
    extension=ZopeTransactionExtension()
))


def includeme(config):
    """ Setup sqlalchemy session connection for pyramid app.

    :param config: Pyramid configuration

    """
    config.include('pyramid_tm')
    # creates database engine from ini settings passed to pyramid wsgi
    engine = sqlalchemy.engine_from_config(
        config.get_settings(), connect_args={
            'charset': 'utf8'
        }
    )
    # scoped session gives us thread safe session
    Session.configure(bind=engine)
    # make database session available in every request
    config.add_request_method(
        callable=lambda request: Session, name='dbsession', property=True
    )

使用pip安裝zope.sqlalchemy和pyramid_tm並調用config.include(pyramid_sqlalchemy)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM