Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么SQLAlchemy在我的程序中添加的行比类实例多?_Python_Mysql_Sqlalchemy - Fatal编程技术网

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创建外键,并意外地创建了一个内部关系。一旦我创造了真正的外键而不是内部关系,问题就自行解决了。