Python 为什么SQLAlchemy在我的程序中添加的行比类实例多?
我有一个类Python 为什么SQLAlchemy在我的程序中添加的行比类实例多?,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我有一个类基因列表,它是一个基因实例列表,还有一个类基因签名,它是一个基因列表加元数据。由于某种原因,在我将基因列表添加并提交到数据库后,我的基因列表中的基因数量会发生变化。例如: print(len(gene_signature.gene_list)) # 204 session.add(gene_signature) session.commit() print(len(gene_signature.gene_list)) # 362 奇怪的是,只有当我连接到开发数据库时才会发生这种情况,
基因列表
,它是一个基因
实例列表,还有一个类基因签名
,它是一个基因列表
加元数据。由于某种原因,在我将基因列表添加并提交到数据库后,我的基因列表中的基因数量会发生变化。例如:
print(len(gene_signature.gene_list)) # 204
session.add(gene_signature)
session.commit()
print(len(gene_signature.gene_list)) # 362
奇怪的是,只有当我连接到开发数据库时才会发生这种情况,而开发数据库没有设置外键约束。如果我使用相同的输入数据执行相同的add
/commit
,但使用适当的外键约束连接到我的生产数据库,则数字是204
,然后是204
,正如预期的那样
我认为外键约束只适用于数据完整性。这可能是什么原因造成的
编辑:
我设置了外键,问题自行解决了。为什么?您是如何创建第一个版本的
gene\u签名。gene\u列表的
?如果您打开sqlalchemy日志来查看发生了什么,也会有所帮助,例如:logging.getLogger('sqlalchemy').setLevel(logging.DEBUG)
I首先创建GeneList
,进行一些筛选(即从列表中删除Gene
实例)然后将修改后的列表传递给GeneSignature
构造函数。在不查看模型定义的情况下,很难准确判断发生了什么,但这通常发生在数据库中已有数据的情况下。可能基因签名
已经存在,或者基因列表
已经有一些未正确删除的项。我使用phpMyAdmin创建外键,并意外地创建了一个内部关系。一旦我创建了真正的外键而不是内部关系,问题就解决了。您是如何创建第一个版本的gene\u签名的。gene\u list
?如果您打开sqlalchemy日志来查看发生了什么,也会有所帮助,例如:logging.getLogger('sqlalchemy').setLevel(logging.DEBUG)
I首先创建GeneList
,进行一些筛选(即从列表中删除Gene
实例)然后将修改后的列表传递给GeneSignature
构造函数。在不查看模型定义的情况下,很难准确判断发生了什么,但这通常发生在数据库中已有数据的情况下。可能基因签名
已经存在,或者基因列表
已经有一些未正确删除的项。我使用phpMyAdmin创建外键,并意外地创建了一个内部关系。一旦我创造了真正的外键而不是内部关系,问题就自行解决了。