【发布时间】:2018-11-03 13:21:59
【问题描述】:
我曾问过这个问题How to create instance of a table entry but not added in ponyorm?,我问的是如何在不立即添加的情况下创建定义为 ponyorm 表表示的类的实例。通过使用 sqlalchemy,在 session 实例上需要显式 add,我认为我使用以下代码成功了。
我首先创建了一个名为 AddInstance 的类,它有一个 add 方法,然后在我的所有表定义中都继承自它。这似乎可行(即,我可以创建一个类的实例并仅在我想相对容易的情况下添加它)但我不确定是否有任何意外的副作用,或者这与最佳实践相去甚远。
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import Column, String, Integer
engine = create_engine('sqlite:///:memory:')
Base = declarative_base()
Session = sessionmaker(bind=engine)
class AddInstance:
def add(self):
session = Session()
session.add(self)
session.commit()
class Pizza(Base, AddInstance):
__tablename__ = 'pizzas'
id = Column(Integer, primary_key=True)
name = Column(String(50))
toppings = relationship('Topping', back_populates='name')
class Topping(Base, AddInstance):
__tablename__ = 'fruits'
id = Column(Integer, primary_key=True)
name = Column(String(50))
pizzas = relationship('Pizza', back_populates='name')
Base.metadata.create_all(engine)
【问题讨论】:
标签: python sqlalchemy