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