python - SQLAlchemy ORM:无效的集合
问题描述
我不明白为什么 SQLAlchemy 会给我以下警告:
SAWarning: This collection has been invalidated.
util.warn("This collection has been invalidated.")
这是一个最小的例子:
import sqlalchemy
print(sqlalchemy.__version__)
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
Base = declarative_base()
class ModelBase:
@classmethod
def create(cls, session, **kwargs):
obj = cls(**kwargs)
session.add(obj)
session.commit()
return obj
class User(ModelBase, Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
addresses = relationship("Address", order_by="Address.id", back_populates="user")
class Address(ModelBase, Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", back_populates="addresses")
engine = create_engine('sqlite:///:memory:', echo=False)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
jack = User.create(session)
jack.addresses.append(Address.create(session))
警告在最后一行抛出。当我稍微重写代码时,警告消失了。
例如:
jack = User.create(session)
a = Address.create(session)
jack.addresses.append(a)
或者
jack = User.create(session)
jack.addresses = [Address.create(session)]
我可以使用 SQLAlchemy 1.3.18 和 1.4.0b1 重现此警告。
解决方案
推荐阅读
- java - 使用正则表达式将句子拆分为单词中还包含多个空格的单词
- amazon-web-services - 如何将 keycloak 部署到 EKS 集群
- linux - GZIP 未与 crontab 一起运行
- python - 尝试将 prepend 方法添加到链表
- javascript - 在制表器中滚动时保留选择
- ios - Xamarin.forms - 底部阴影工具栏 ios 出现问题
- r - R计算错误在哪里?
- javascript - JavaScript 表格结果控制台
- python-3.x - 可以用 scipy 最小化曲线拟合曲线,但不能用 scipy curve_fit
- java - 基于国家/地区的 Spring Boot 依赖注入