2013-10-18 2 views
0

dbManager.create_all() 명령을 실행할 때 오류없이 실행되지만 테이블을 만들지 못합니다. 내가 데이터베이스를 삭제하고 create_all() 명령을 실행하면 ##### 오류가 발생하지만 데이터베이스가 존재해도 아무 것도 발생하지 않습니다. 제발 내가 잘못한 것을 누구든지 볼 수 있습니까?Flask-SQLAlchemy create_all()

from blogconfig import dbManager 


class Art(dbManager.Model): 
    id = dbManager.Column(dbManager.Integer, primary_key = True) 
    title = dbManager.Column(dbManager.String(64), index = True, unique = True) 
    content = dbManager.Column(dbManager.Text(5000)) 




    def __repr__(self): 
     return '<Art %r>' %(self.title) 

편집 이 그들이 create_all을 실행하기 전에 수입하지 않는

from blogconfig import dbManager 
>>> dbManager.create_all() 



import models 

>>> a = models.Art(title='des', content='asdfvhbdjbjdn') 
>>> dbManager.session.add(a) 
>>> dbManager.session.commit() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/scoping.py", line 149, in do 
    return getattr(self.registry(), name)(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 721, in commit 
    self.transaction.commit() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 354, in commit 
    self._prepare_impl() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 334, in _prepare_impl 
    self.session.flush() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1818, in flush 
    self._flush(objects) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1936, in _flush 
    transaction.rollback(_capture_exception=True) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 58, in __exit__ 
    compat.reraise(exc_type, exc_value, exc_tb) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1900, in _flush 
    flush_context.execute() 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 372, in execute 
    rec.execute(self) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 525, in execute 
    uow 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 64, in save_obj 
    table, insert) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 569, in _emit_insert_statements 
    execute(statement, params) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 662, in execute 
    params) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 761, in _execute_clauseelement 
    compiled_sql, distilled_params 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 874, in _execute_context 
    context) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1024, in _handle_dbapi_exception 
    exc_info 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 195, in raise_from_cause 
    reraise(type(exception), exception, tb=exc_tb) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 867, in _execute_context 
    context) 
    File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 324, in do_execute 
    cursor.execute(statement, parameters) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
sqlalchemy.exc.ProgrammingError: (ProgrammingError) (1146, "Table 'blog.art' doesn't exist") 'INSERT INTO art (title, content) VALUES (%s, %s)' ('des', 'asdfvhbdjbjdn') 
+0

실행중인 셸 명령을 게시하는 경우 누락 된 내용을 훨씬 쉽게 알려줄 수 있습니다. –

+0

전체 코드베이스와 관련된 문제를 논의했기 때문에이 문제를 알 수 없습니다. 문제가 발생한 곳을 정확하게 찾아내려면 문제를 자세히 조사해야합니다. 나는 SQLAlchemy 로깅을 가능하게하고'create_all()'호출 중에 데이터베이스 테이블이 올바르게 생성되도록하는 것이 좋습니다. 메타 데이터를 채우지 못하게하여,'create_all()'은 테이블을 생성해야한다는 것을 인식하지 못합니다. –

답변

1

dbManager 당신이 다른 모듈에서 정의한 모델에 대해 알 수 없습니다 쉘 명령을합니다.

실제 응용 프로그램에서는 플라스크 앱을 실행하면 db 및 가져 오기 뷰/청사진을 설정하여 등록해야하기 때문에 이것은 중요하지 않습니다. 뷰는 모델을 사용하기 때문에 모델을 간접적으로 가져 와서 dbManager에서 사용할 수 있습니다.

중 하나 dbManager 인스턴스를 만든 후 blogconfig 모듈에서 모델을 가져 오거나 당신이 SQLAlchemy의 만 테이블을 생성합니다

이 이 이 데이터베이스가 이미 존재해야하는 이유입니다
>>> from blogconfig import dbManager 
>>> import models 
>>> dbManager.create_all() 
하는 것으로 명령 쉘의 순서를 변경 데이터베이스를 삭제할 때 다른 오류가 표시됩니다.