Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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_Database_Sqlalchemy_Foreign Keys_Associations - Fatal编程技术网

Python SQLAlchemy将行插入到桥接表

Python SQLAlchemy将行插入到桥接表,python,database,sqlalchemy,foreign-keys,associations,Python,Database,Sqlalchemy,Foreign Keys,Associations,我的问题是如何使用SQLAlchemy将行插入桥接表?我试图查找,但由于两个原因无法直接应用它们:桥接表有一个附加列,而且引用的对象已经存在,我们不想重新创建它们 假设我有三张桌子:袜子、鞋子和桥牌。桥接表有3列: 外国短袜 外企鞋 整数 我定义数据库模式的方式与中的类似(请参见多对多部分),其中“普通”表定义为类,桥接表定义为表: bridge = Table(...) class Sock(Base): ... class Shoe(Base): ... 我使用psql检查了数据库模式

我的问题是如何使用SQLAlchemy将行插入桥接表?我试图查找,但由于两个原因无法直接应用它们:桥接表有一个附加列,而且引用的对象已经存在,我们不想重新创建它们

假设我有三张桌子:袜子、鞋子和桥牌。桥接表有3列:

  • 外国短袜
  • 外企鞋
  • 整数
我定义数据库模式的方式与中的类似(请参见多对多部分),其中“普通”表定义为类,桥接表定义为表:

bridge = Table(...)
class Sock(Base): ...
class Shoe(Base): ...
我使用psql检查了数据库模式是否正确创建。我可以穿袜子和鞋子。当我尝试向桥接表中插入某些内容时,会出现错误

首先,我尝试像插入普通表一样插入行:

link = bridge(...)
db.add(link)
db.commit()

提交行生成
TypeError:Table对象不可调用
。我假设这是因为桥是在没有类声明的情况下定义的。我发现了另一个例子,他们也为桥接表声明了一个类,所以我尝试了。如果我声明了一个类而不是一个“表”,我的其他类就会因为
未解析的引用“桥”而中断。声明类的顺序无关紧要。如果我同时声明一个表和一个类,我会得到一个已定义的
错误。我还试着猜测各种其他语法选项,但目前我已经没有什么想法了。

您可以找到主要问题的答案。至于为什么将
bridge
声明为映射类
bridge
不起作用,您需要将类定义中的
bridge
替换为
bridge.\uuuu table\uuu
。(当然,你会得到“未解析的引用”,因为你还没有定义
bridge
任何地方!)我修改了你链接的例子。现在我不会因为添加链接而出错,但它们不会出现在数据库中。同样,我可以添加到常规表中,但不能添加到桥接表中。我不知道在没有错误的情况下如何调试它。你必须发布一个。如果只提供症状而不提供正在执行的操作,则无法进行调试。现在发布MCVE。在某些行的末尾有额外的逗号。