2013-10-18 47 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) 

編輯 這是shell命令

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

如果你還要發佈你執行的shell命令,將會更容易告訴你你錯過了什麼。 –

+0

因爲您已經討論了與您的整個代碼庫相關的問題,所以我們不可能知道這個問題。您需要更多地調查問題,以便能夠明確自己發生問題的位置。我建議啓用SQLAlchemy日誌記錄並確保在create_all()調用期間正確創建數據庫表。我想象你不正確地導入東西,導致元數據不被填充,所以'create_all()'不能識別它需要創建表。 –

回答

1

dbManager不會知道你在其他模塊定義的模型,除非它們正在運行create_all之前進口。

在實際的應用程序中,這應該沒有關係,因爲運行燒瓶應用程序應該設置db並導入views/blueprints來註冊它們。由於視圖使用模型,所以模型間接導入並可供dbManager使用。

要麼導入模型blogconfig模塊中創建dbManager實例後,或更改訂單的你的shell命令是

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

SQLAlchemy的只會創建表,數據庫必須已經存在,這是爲什麼您在刪除數據庫時看到另一個錯誤。

相關問題