Public
Snippet $105 authored by Owo Sugiana

Multi-Thread DB Session Error

multi-db-session-error.py
from sqlalchemy import (
    create_engine,
    Column,
    Integer,
    String,
    )
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker


Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    user_name = Column(String(128), nullable=False)
    email = Column(String(100), nullable=False)
    status = Column(Integer, nullable=False)


db_url = 'postgresql://sugiana:a@localhost/test'

engine = create_engine(db_url)
factory = sessionmaker(bind=engine)
db_session_1 = factory() 
db_session_2 = factory()

q = db_session_1.query(User).filter_by(user_name='admin')
row = q.first()

row.email = 'admin@local.net'
db_session_1.add(row)

row.status = 2
# sqlalchemy.exc.InvalidRequestError: Object '<User at 0x7f20b4a3d9d0>' is already attached to session '1' (this is '2')
db_session_2.add(row)