2015-07-17 2 views
0

У меня есть 6 таблиц в базе данных sqlite, и я пытаюсь добавить новую строку в одну из таблиц с помощью sqlalchemy. Вот мои таблицы:ТипError: __init __() получил неожиданную ошибку аргумента ключевого слова

class DSource(Base): 
    __tablename__ = 'dsource' 

    source_id = Column(Integer, primary_key=True) 
    subjects= relationship("Subject") 

class Subject(Base): 
    __tablename__ = 'subject' 

    subject_id = Column(Integer, primary_key=True) 
    source_id=Column(Integer, ForeignKey("dsource.source_id"),nullable=False) 
    sequences= relationship("Sequence") 

class Sequence(Base): 
    __tablename__ = 'sequence' 

    sequence_id = Column(Integer, primary_key=True) 
    subject_id=Column(Integer, ForeignKey("subject.subject_id"),nullable=False) 

Вот код, я использую, чтобы добавить новую последовательность в таблице:

engine = create_engine('sqlite:////Desktop/emotion_data/test.db',echo=True) 
Session = sessionmaker(bind=engine) 
session = Session() 

new_sequence=Sequence(sequence_id=0,subject_id=1) 
session.add(new_sequence) 
session.commit() 

Но я получаю эту ошибку:

TypeError: __init__() got an unexpected keyword argument 'subject_id' 

Я понятия не имею, что это значит, я уже импортировал экземпляр «subject» с «subject_id = 0» в таблицу, поэтому subject_id = 0 уже находится в базе данных.

Может ли кто-нибудь помочь мне?

+0

Я также должен упомянуть, что определение таблиц и кода, который я использую для добавления новой последовательности, находятся в разных файлах python. Я импортировал вышеуказанные классы до вызова session.add(). Если я поместил их все вместе в один файл python, он отлично работает без ошибок. – user2308191

ответ

2

Ваш код выглядит хорошо, если исключение возникает только при расколе вашего источника в разные файлы. Должно быть что-то вроде конфликта имен, класс Sequence может быть не таким, как вы ожидали, вы можете проверить это, добавив эти строки перед процессом init.

print Sequence.__module__ 
print type(Sequence) 
+0

Спасибо! Я пробовал приведенный выше код, и вот результат: 'sqlalchemy.sql.schema ' – user2308191

+0

Это был конфликт имен, я меняю имя класса «Sequence», к чему-то еще, и теперь все прекрасно работает! Большое спасибо! – user2308191

+0

@ user2308191aha, 'Sequence' - это имя, которое использует sqlalchemy. http://docs.sqlalchemy.org/en/rel_1_0/core/defaults.html#sqlalchemy.schema.Sequence – piglei