我不确定我是否理解你的困境。
在 Django 中,
foo = MyModel(field1='value1', field2='value2')
foo.save()
或者
foo = MyModel.objects.create(field1='value1', field2='value2')
在 SQLAlchemy 中,
foo = MyModel(field1='value1', field2='value2')
session.add(foo)
此时您只是将对象添加到会话中,它还没有提交事务。只有在完成所需的任何更改后,您才需要提交
session.commit()
看看这个链接。我认为这将使从 Django ORM 到 SqlAlchemy 的过渡更容易。
更新
对于这种情况,您可以使用多个会话。
engine = create_engine("postgresql+psycopg2://user:password@localhost/test")
metadata = MetaData(bind=engine)
Session = sessionmaker(bind=engine)
session1 = Session()
session2 = Session()
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return "<User('%s','%s')>" % (self.name, self.age)
Base.metadata.create_all(engine)
在“测试”数据库中创建了一个表“用户”。此外,还初始化了 2 个会话对象 session1 和 session2。
a = User('foo','10')
b = User('bar', '20')
session1.add(a)
session1.add(b)
session1.commit()
表用户现在将有 2 条记录
1: foo, 10
2: bar, 20
使用 session2 获取 'foo' 记录唱 session1 和 'bar'。
foo = session1.query(User).filter(User.name == "foo").first()
bar = session2.query(User).filter(User.name == "bar").first()
更改 2 条记录
foo.age = 11
bar.age = 21
现在,如果您希望仅 foo 的更改继续进行,
session1.commit()
对于酒吧,
session2.commit()