シンプルなセットアップ、Sqlaclhemyセッション、私はこのようになりますシンプルなTaskオブジェクト持って
を動作していないよう抹消:私は、データベースにインスタンスを追加しようとしています、そして、
# -*- coding: utf-8 -*-
from sqlalchemy import Column, Integer, String, Text, DateTime, Float, func, ARRAY,ForeignKey
from sqlalchemy.orm import relationship
from . import Base
import settings
import config.customer
import datetime
class Task(Base):
__tablename__ = "task"
id = Column(Integer, primary_key=True)
value = Column(Integer)
def __init__(self, value):
self.value = value
@classmethod
def get_fake_task(cls):
return Task(10)
を何らかの理由でセッションからそれを使用すると動作しません。
# -*- coding: utf-8 -*-
import config
import config.customer
import config.task
import datetime
#config.Base.metadata.create_all(config.engine)
FAKE_TASK = config.task.Task.get_fake_task()
session1 = config.create_session()
session1.add(FAKE_TASK)
session1.commit()
session1.close()
session2 = config.create_session()
session2.add(FAKE_TASK)
session2.refresh(FAKE_TASK)
FAKE_TASK.value = 999999
print(FAKE_TASK.id)
session2.merge(FAKE_TASK)
session2.commit()
session2.expunge_all()
session2.close()
print(FAKE_TASK.value)
これはかなり簡単な設定で、私の他のプロジェットでは、このような問題はありませんでした。たぶん私は別の場所で間違っているのでしょうか?上記のスクリプトでは
一番最後に値を印刷しようとしたとき、私は次のエラーを取得する:ここで
sqlalchemy.orm.exc.DetachedInstanceError: Instance is not bound to a Session; attribute refresh operation cannot proceed
は、ベースの宣言と設定内の__init__.pyファイルでエンジンですモジュール:
from sqlalchemy.engine.url import URL
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import settings
from contextlib import contextmanager
Base = declarative_base()
engine = create_engine(URL(**settings.DATABASE), pool_size=0, max_overflow=-1)
Session = sessionmaker(bind=engine)
def create_session():
session = Session()
return session
はあなたの助け