2013-10-18 48 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的只会创建表,数据库必须已经存在,这是为什么您在删除数据库时看到另一个错误。

相关问题