我正在尝试在SQLAlchemy中创建一个对象,该对象可以与许多项有关系,但不必如此。这是我的模型文件:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy import Column, String, Integer, ForeignKey
Base = declarative_base()
class Media(Base):
__tablename__ = "media"
id = Column(Integer, primary_key=True, unique=True, autoincrement=True)
video_id = Column(String)
audio = relationship("audio", back_populates="media")
class Audio(Base):
__tablename__ = "audio"
id = Column(Integer, primary_key=True, unique=True, autoincrement=True)
media_id = Column(Integer, ForeignKey("media.id"))
media = relationship("Media", back_populates="audio")
这将创建从媒体到音频的一对多关系。但是,当我尝试使用[]
或None
作为参数来创建媒体项时,它会出错。以下是我正在做的:
new_media_item = Media(
video_id = some_video_id,
audio = None # i've also tried [] or just not specifying audio
)
但我得到了这个错误:
Traceback (most recent call last):
--- some cli code, snipped ---
File "cool_program.py", line 30, in do_add_media
audio = None
File "<string>", line 2, in __init__
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/orm/instrumentation.py", line 376, in _new_state_if_none
state = self._state_constructor(instance, self)
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 855, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/orm/instrumentation.py", line 202, in _state_constructor
self.dispatch.first_init(self, self.class_)
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/event/attr.py", line 322, in __call__
fn(*args, **kw)
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/orm/mapper.py", line 3361, in _event_on_first_init
configure_mappers()
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/orm/mapper.py", line 3249, in configure_mappers
mapper._post_configure_properties()
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/orm/mapper.py", line 1947, in _post_configure_properties
prop.init()
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/orm/interfaces.py", line 196, in init
self.do_init()
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/orm/relationships.py", line 1914, in do_init
self._process_dependent_arguments()
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/orm/relationships.py", line 1976, in _process_dependent_arguments
self.target = self.entity.persist_selectable
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 855, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "/home/spazzlo/.local/lib/python3.6/site-packages/sqlalchemy/orm/relationships.py", line 1899, in entity
% (self.key, type(argument))
sqlalchemy.exc.ArgumentError: relationship 'audio' expects a class or a mapper argument (received: <class 'sqlalchemy.sql.schema.Table'>)
您应该指向关系中的类名,而不是表名:
相关问题 更多 >
编程相关推荐