簡體   English   中英

Flask-SQLAlchemy沒有使用create_all()創建表

[英]Flask-SQLAlchemy not creating tables using create_all()

我有一個使用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()

這是我的兩個模型的示例,每個模型來自一個綁定類型:

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')的新實例,您應該導入模型所從的實例:

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()

您的SQLALCHEMY_DATABASE_URI錯誤,請在此處閱讀如何配置您的引擎Sqlite數據庫http://docs.sqlalchemy.org/en/rel_0_9/core/engines.html#sqlite

如果您從未體驗過,請參閱此回購並應用於您的應用程序:) https://github.com/Fird0s/Banda-Maps/blob/master/models.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM