2013-02-25 40 views
4

我有一個使用Flask-SQLAlchemy的Flask應用程序。在我的單元測試中,我初始化了應用程序和數據庫,然後致電db.create_all(),出於某種原因,它看起來沒有拾取我的任何模型,因此不創建任何表。Flask-SQLAlchemy不使用create_all創建表()

我在我的模型中使用__tablename____bind_key__,因爲我有兩個數據庫。

我的配置:

SQLALCHEMY_DATABASE_URI = 'sqlite://' 

SQLALCHEMY_BINDS = { 
    'db1': SQLALCHEMY_DATABASE_URI, 
    'db2': SQLALCHEMY_DATABASE_URI 
} 

砍掉我的setUp()方法的版本在我的單元測試:

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 

class APITestCase(unittest.TestCase): 

    app = Flask(__name__) 
    db = SQLAlchemy(app) 
    db.create_all() 

這裏是我的兩個車型,分別來自綁定類型的例子:

class Contact(db.Model): 

    __tablename__ = 'contact' 
    __bind_key__ = 'db1' 

    id = db.Column(db.Integer, primary_key=True) 
    first_name = db.Column(db.String(255)) 
    last_name = db.Column(db.String(255)) 
    ... 

    def __init__(first_name, last_name): 
     self.first_name = first_name 
     self.last_name = last_name 
     ... 

class BaseUser(db.Model): 

    __tablename__ = 'User__GeneralUser' 
    __bind_key__ = 'db2' 

    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column('Username', db.String(100)) 
    first_name = db.Column('FirstName', db.String(100)) 
    last_name = db.Column('Surname', db.String(100)) 
    ... 

    def __init__(username, first_name, last_name): 
     self.username = username 
     self.first_name = first_name 
     self.last_name = last_name 
     ... 

我錯過了明顯的東西嗎? Flask-SQLAlchemy如何知道在哪裏尋找我的模型以創建關聯的表?

+0

你有你的進口模型類? – flyx 2013-02-25 14:18:27

+0

是的,我已經嘗試過,並且沒有導入我的模型。 – 2013-02-25 15:08:36

回答

10

在單元測試中,你不應該創建SQLAlchemy的對象(「DB」)的新實例,你應該導入從您的模型下降的實例:

models.py:

from flask.ext.sqlalchemy import SQLAlchemy 
db = SQLAlchemy() 

class Contact(db.Model): 
    ... 

tests.py:

from models import db 
from flask import Flask 
import unittest 

class TestExample(unittest.TestCase): 

    def setUp(self): 
     self.app = Flask(__name__) 
     db.init_app(self.app) 
     with self.app.app_context(): 
      db.create_all() 
+0

如果在許多模塊中實現了所有模型聲明,那麼確保所有模型聲明都得到執行的方法有哪些? – satoru 2014-12-18 08:26:59