3

データベースにアクセスしようとすると、列にアクセスできません。初期化データベース スクリプトを複数回実行しました。コードは次のとおりです。

意見

from .models import Session, Admin
@view_config(route_name='admin', renderer='templates/admin.pt')
def admin(request):
    session = Session()
    user = authenticated_userid(request)
    admin = bool(session.query(Admin).filter_by(username = user).first())
    message = ''
    if admin:
        if 'form.submitted' in request.params:
            session.add(Admin(request.params['admin']))
            session.commit()
            message = "%s has been added as an Admin!" % request.params['admin']
            return dict(url=request.route_url('admin'),
                        message = message,
                    )
        return dict(message = message)
    else:
        return HTTPForbidden()

モデル

class Admin(Base):
    __tablename__='admins'
    __table_args__={
        'mysql_engine':'InnoDB',
        'mysql_charset':'utf8',
    }

    username = Column(String(255), ForeignKey('users.username'), primary_key=True)

    def __init(self, user):
        self.username = user
4

1 に答える 1

7

データベース スクリプトは、既存のテーブルに列を追加できません。スクリプトの実行後に列を変更または追加した場合、それが問題の原因です。

次の 3 つの可能性があります。

  • データベースを削除し、スクリプトに正しい方法で再作成させます
  • SQL を実行して列を手動で追加します。
  • それを自動的に行うのに役立つAlembicを見てください。
于 2012-07-01T08:56:37.557 に答える