2012-07-01 78 views
2

當試圖訪問數據庫時,我無法訪問該列,我已經多次運行init數據庫腳本,代碼如下:金字塔:OperationalError 1054,「字段列表中的未知列'XX'

查看

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 
+0

對於那些想知道的人,我所做的是修改init db腳本以使用Base.metadata.drop_all(engine)函數刪除所有表,並且它會刪除所有表,而不是數據庫本身,從而使其更快。 – Wiz

回答

3

數據庫腳本不能在已經存在的表添加列。如果你修改或運行該腳本後添加列,這就是你的問題 來自。

你有三種可能性:

  • 刪除數據庫,並讓腳本重新創建正確的方式
  • 運行SQL手工添加列。
  • 看看Alembic,它可以幫助你自動做到這一點。
相關問題