Python SqlAlchemy TypeError:不兼容的集合类型:行与列表不同

Python SqlAlchemy TypeError:不兼容的集合类型:行与列表不同,python,sqlalchemy,Python,Sqlalchemy,我已经做了这个模式和插入,我得到了行和条之间的关系,每个条也和NameBar有关系,这只是一个简历模式。我的问题是,每次我尝试插入时,我都会遇到如何建立关系的问题,这是我第一次使用SQLAlchemy并做一些事情 模式 插入 所以,我在这里要做的是:;每次我有了名称行,我也想插入条的名称,所以我想在插入新行时插入该名称栏,这样我就可以拥有与条相关的关系和id 希望有人能帮助我,理解我想说的话。 谢谢 我认为您所遇到的错误是因为SQLAlchemy希望条和线之间存在一对多的关系,因此一个条有多条线

我已经做了这个模式和插入,我得到了行和条之间的关系,每个条也和NameBar有关系,这只是一个简历模式。我的问题是,每次我尝试插入时,我都会遇到如何建立关系的问题,这是我第一次使用SQLAlchemy并做一些事情

模式

插入

所以,我在这里要做的是:;每次我有了名称行,我也想插入条的名称,所以我想在插入新行时插入该名称栏,这样我就可以拥有与条相关的关系和id

希望有人能帮助我,理解我想说的话。
谢谢

我认为您所遇到的错误是因为SQLAlchemy希望条和线之间存在一对多的关系,因此一个条有多条线。因此,bar.relat将是一个行列表,而不仅仅是一个实例

所以当你试着做newBar=Barzona='uuh',relat=newLine SQLAlchemy希望relat kwarg有一个新行列表,它对此表示不满

请尝试这样做:

纽巴=巴尔佐纳='uuh',relat=[newLine]

或者,对于不希望一对多而是一对一关系的情况,应使用uselist=False kwarg进行关系调用,请参阅:

在这种情况下,您可以只分配和检索单个实例,而不是列表


希望一切都清楚

我认为您所遇到的错误是因为SQLAlchemy希望条和线之间存在一对多的关系,因此一个条有多条线。因此,bar.relat将是一个行列表,而不仅仅是一个实例

所以当你试着做newBar=Barzona='uuh',relat=newLine SQLAlchemy希望relat kwarg有一个新行列表,它对此表示不满

请尝试这样做:

纽巴=巴尔佐纳='uuh',relat=[newLine]

或者,对于不希望一对多而是一对一关系的情况,应使用uselist=False kwarg进行关系调用,请参阅:

在这种情况下,您可以只分配和检索单个实例,而不是列表


希望一切都清楚

非常感谢!!是你告诉我的。我认为这是对我所做事情的错误描述。我也会看看一对一的关系,没问题。我还建议你用一种更有意义的方式来命名你的关系,例如你可以将relat重命名为lines,这样你就不那么容易混淆了。你可以很容易地找到复数名称,以表示一系列的事情。非常感谢!!是你告诉我的。我认为这是对我所做事情的错误描述。我也会看看一对一的关系,没问题。我还建议你用一种更有意义的方式来命名你的关系,例如,你可以将relat重命名为line,这样你就不那么容易混淆了,你可以很容易地找到复数名,以表示一系列的事情。
class Line(Base):
   __tablename__ = 'line' # Nombre de la tabla 

   id = Column(Integer, primary_key = True)
   fechaEntrada = Column(DateTime, default = datetime.utcnow)
   nameLine = Column(String(250))
   bar_id = Column(Integer, ForeignKey('bar.id'))

   bar = relationship("Bar", foreign_keys = 'Line.bar_id', backref = 'relat') 

class Bar(Base):
   __tablename__ = 'bar'
   id = Column(Integer, primary_key = True)
   zona = Column(String(250))
   nameBar_id = Column(Integer, ForeignKey('nameBar.id'))
   line_id = Column(Integer, ForeignKey('line.id'))

   nameBar = relationship("NameBar", foreign_keys = 'Bar.nameBar_id' , backref = 'rela')
   line = relationship("Line", foreign_keys = 'Bar.line_id') # Relacion con la linea

class NameBar(Base):
   __tablename__ = 'nameBar'
   id = Column(Integer, primary_key = True)
   nameBar1 = Column(String(250))
   nameBar2 = Column(String(250))
   bar_id = Column(Integer, ForeignKey('bar.id'))

   bar = relationship("Bar", foreign_keys = 'NameBar.bar_id')
  newLine = Line(fechaEntrada = '2017-01-01 12:00:00', nameLine = 'Lala')
  newBar = Bar(zona = 'uuh', relat = newLine)
  newNameBar = NameBar(rela = newBar , nameBar1 = 'hi', nameBar2 = 'hi2')

  session.add(newLine)
  session.add(newNameBar)
  session.add(newBar)
session.commit()