ちょうど頭が上がって、私は一般的なプログラミングには慣れていないので、私は単純なものを見逃していると思います。私は公式tutorial hereに従うことを試みており、私はBuilding Relationshipsセクションにいる。 'addresses'テーブルがないと、最後のsession.commit()まで動作します。これは私のコードがすべきだと思うものです。公式のORMチュートリアルに続き、私はエラーに陥っています
- アドレスはテーブルを設定します。
- metadata.create_all(engine)は、現在のセッションでテーブルを作成します。
- いくつかのアドレスを含む新しいユーザー 'ジャック'を設定しました。
- 私は 'ジャック'を追加してコミットしようとします。
私が間違っていることがわかりません。何か助けていただければ幸いです。
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship, backref
Base = declarative_base()
metadata = MetaData()
engine = create_engine('sqlite:///:memory:', echo=False)
Session = sessionmaker(bind=engine)
session = Session()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('fullname', String),
Column('password', String)
)
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
def __repr__(self):
return "<User('%s', '%s', '%s')>" % (self.name, self.fullname, self.password)
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
email_address = Column(String, nullable=False)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship(User, backref=backref('addresses', order_by=id))
def __init__(self, email_address):
self.email_address = email_address
def __repr__(self):
return "<Address('%s')>" % self.email_address
metadata.create_all(engine)
session.add_all([User('jim', 'Jim Gregson', 'secretword'),
User('john', 'John Smith', 'password'),
User('jane', 'Jane Doe', 'qweasdzxc'),
User('bob', 'Bob Johnson', '122765')])
session.commit()
for instance in session.query(User).order_by(User.id): print instance
jack = User('jack', 'Jack Bean', 'gjffdd')
print "jack.addresses: ", jack.addresses
jack.addresses = [Address(email_address='[email protected]'), Address(email_address='[email protected]')]
print "jack.addresses: ", jack.addresses
print "jack.addresses[1].user: ", jack.addresses[1].user
session.add(jack)
session.commit()
Error below when 'session.commit()' is called;
sqlalchemy.exc.OperationalError: (OperationalError) no such table: addresses u'INSERT INTO addresses (email_address, user_id) VALUES (?, ?)' ('[email protected]', 5)
エラーはトレースバックを見ることで修正されますので、投稿してください。 –