Python 如何通过更改主列对表进行子类化?
我想使用SQLAlchemy向数据库添加一些测试装置。它应该Python 如何通过更改主列对表进行子类化?,python,testing,sqlalchemy,Python,Testing,Sqlalchemy,我想使用SQLAlchemy向数据库添加一些测试装置。它应该获取或设置相应的值。我试图创建一个模型方法,如:ProductsModel.sure(name=“Dettol”),它将确保数据库中的数据与name列相对应,其中Products的定义如下: 产品 类产品(基本): __tablename_uu=‘产品’ idn=列(整数) 名称=列(字符串,主键=True) ProductsModel。确保将根据组合键(name在本例中)执行唯一行检查,并决定是否必须获取或设置它 但是,我无法修改
获取
或设置
相应的值。我试图创建一个模型方法,如:ProductsModel.sure(name=“Dettol”)
,它将确保数据库中的数据与name
列相对应,其中Products
的定义如下:
产品
类产品(基本):
__tablename_uu=‘产品’
idn=列(整数)
名称=列(字符串,主键=True)
ProductsModel。确保
将根据组合键(name
在本例中)执行唯一行检查,并决定是否必须获取或设置它
但是,我无法修改真实的
产品
表定义,该表定义(在别处)使用id
作为主键,如下所示:
类产品(基本):
__tablename_uu=‘产品’
idn=列(整数,主键=True)
名称=列(字符串)
那么,我是否可以继承表并修改测试夹具用例的主键
我试过这样的方法:
class ProductsUnique(产品):
__映射器参数={
“多态性身份”:“产品身份”,
“多态”:Products.idn,希望我可以覆盖idn。
}
idn=列(整数)
名称=列(字符串,主键=True)
但它说:
sqlalchemy.exc.ArgumentError: Column 'idn' on class <class '__main__.ProductsUnique'> conflicts with existing column 'products.idn'
sqlalchemy.exc.ArgumentError:类上的列“idn”与现有列“products.idn”冲突
我相信,在原始表上设置polymorphic_on
可以解决这个问题;但问题是我在那里做不到
在定义了类之后,有没有办法设置它?SQLAlchemy存储库中似乎有类似的代码
PS:读了很多帖子后,我想我正在寻找类似Django的东西;但我想更清楚我桌子的位置。我不确定是否存在解决此问题的现有解决方案。为什么需要修改主键以检查行是否存在?您不能使用
会话.合并
,但您可以自己执行检查:
class Product:
@classmethod
def get_or_create(cls, name):
query = session.query(Product).filter_by(name=name)
result = query.one_or_none()
if not result:
result = Product(name=name)
session.add(result)
session.commit()
# maybe load again here to prevent an unexpected one later
return result
如果您担心比赛条件: