python - Flask-SQLAlchemy 不使用 create_all() 创建表

标签 python flask flask-sqlalchemy

我有一个使用 Flask-SQLAlchemy 的 Flask 应用程序。在我的单元测试中,我初始化了应用程序和数据库,然后调用 db.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()

这是我的两个模型的示例,每个绑定(bind)类型各一个:

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 如何知道在哪里寻找我的模型来创建关联表?

最佳答案

在你的单元测试中,你不应该创建一个新的 SQLAlchemy 对象实例('db'),你应该导入你的模型的实例:

模型.py:

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

class Contact(db.Model):
    ...

测试.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()

关于python - Flask-SQLAlchemy 不使用 create_all() 创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15068988/

相关文章:

python - SQLALCHEMY:如何在flask_sqlalchemy-SQLalchemy 中使用@events.listens_for

python - 尝试使用 gpu 导入 tensorflow 时导入错误

python - statsmodel.formula.api python 中的线性回归

python - 在2D Matrix python中选择元素并分配字符

python - 我无法将 ML 模型加载到尝试使用 joblib 和 pickle 的 flask 中

python - 在 Multi-Tenancy 应用程序中动态设置 Flask-SQLAlchemy 数据库连接

Python CGI 替换我的 html

python - 在哪里放置更新数据库的预定功能,以免干扰?

python - 使用 SqlAlchemy Flask 从数据库中删除一行?

Flask 迁移升级在删除表后不起作用