python - Pyramid 事务管理器未提交更新

标签 python postgresql sqlalchemy pyramid

抱歉我之前没说清楚,

编辑: 我正在使用带有 sqlalchemy 的默认 Pyramid 应用程序(后端: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 不存在。创建新记录,但在下次运行时(如果转到 else )记录不会更新,在控制台上我只能看到 ROLLBACK/COMMIT 但看不到其他语句。

那里的打印语句显示了更新的结果,但数据库没有更新。

最佳答案

您应该在请求范围内使用事务。

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)

关于python - Pyramid 事务管理器未提交更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25265482/

相关文章:

python - SCons:单个 SConscript 文件中的不同 variant_dir

python - 如何在 Python 中使用 step 获取随机 float

python - JSON解码错误: Extra data: line 1 column 228 (char 227)

postgresql - 使用一个 INSERT 语句而不是每行 INSERT 创建 PostgreSQL 转储

java.lang.NumberFormatException : For input string: 异常

python - 使用 Alembic 的 SqlAlchemy 创建 double 列

sqlalchemy - 如何在 sqlalchemy 中为 query.update() 使用返回

python - 无效请求错误 : Object '' is already attached to session

python - 使用 numpy 将带有标题的列表列表转换为 csv

ruby-on-rails - 你能加入另一个在 ARel 中不是关联的表吗?