Database SQLAlchemy测试数据到关联对象

Database SQLAlchemy测试数据到关联对象,database,sqlalchemy,associative-table,Database,Sqlalchemy,Associative Table,我正在使用sqlalchemy构建一个DB,我想测试一下我的模型。即使我阅读了一些主题并浏览了文档,我也不确定我是否理解如何将数据加载到关联表中。 我以这种方式创建了两个类: 类实例(基): __tablename_uu='Instances' id=列(整数,主键=True) url=Column(字符串,null=False) env=列(字符串(3),可为null=False) 代码=列(字符串,可空=False) 客户=关系('CustomerInstance',back_populat

我正在使用sqlalchemy构建一个DB,我想测试一下我的模型。即使我阅读了一些主题并浏览了文档,我也不确定我是否理解如何将数据加载到关联表中。 我以这种方式创建了两个类:

类实例(基):
__tablename_uu='Instances'
id=列(整数,主键=True)
url=Column(字符串,null=False)
env=列(字符串(3),可为null=False)
代码=列(字符串,可空=False)
客户=关系('CustomerInstance',back_populates='instance')
类别客户(基本):
__tablename_=“客户”
id=列(整数,主键=True)
名称=列(字符串,可空=False)
代码=列(字符串,可空=False)
实例=关系('CustomerInstance',back_填充='customer')
类CustomerInstance(基本):
__tablename\uuu='Customers\u实例'
customer\u id=列(整数,ForeignKey('Customers.id'),primary\u key=True)
instance_id=Column(整数,ForeignKey('Instances.id'),primary_key=True)
实例=关系('instance',back_populates='customer')
客户=关系('customer',back_populates='instance')
然后我创建会话并刷新它:


现在我如何填充对象/表
CustomerInstance
,因为它只由两个Id组成?我走对了吗?同样的问题,如何将数据注入主键为FK的表中?

可以通过
关系分配链接实例,也可以对链接对象发出
刷新(刷新后,新创建对象的主键被填充)并手动分配ID

例子
instance=CustomerInstance(
实例=实例(url='example.com',env='prd',code=123),
客户=客户(名称='ABC',代码='123'),
)
session.add(实例)
#SQLAlchemy将自行处理外键。
session.flush()

instance=instance(url='example.com',env='prd',code=123),
客户=客户(名称='ABC',代码='123'),
session.add_all([实例,客户])
session.flush()
#现在主键已填充!
cust_实例=CustomerInstance(
customer\u id=customer.id,
instance_id=instance.id,
)

我尝试了第一种方法,但它不起作用:我得到了“CustomerInstance接受1个位置参数,但3个给定”,我如何与其他关联对象建立多对多关系?
声明性基础的标准
构造函数
参数是
sqlalchemy.declarative.base.\u declarative\u构造函数
,它只接受关键字参数。如果以不同的方式构建基类,则必须以不同的方式传递参数。
session = Session()

session.add_all([
    Instance(url='www.web.com', env='prd', code='123'),
    Instance(url='www.123.com', env='prd', code='321'),
    Instance(url='www.qwe.com', env='prd', code='345'),
    Instance(url='www.rty.com', env='prd', code='678'),
    Instance(url='www.hello.com', env='tes', code='098'),
    Instance(url='www.hi.com', env='uat', code='567'),
    Customer(name='ABC', code='567'),
    Customer(name='DEF', code='000'),
    Customer(name='GHI', code='123'),
    Customer(name='KLM', code='456')
])

session.commit()