2014-09-03 2 views
4

db.create_all()에 대한 호출이 작동하지 않는 이유를 모르겠습니다.플라스크 SQLAlchemy db.create_all() 데이터베이스를 만들지 않음

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

# create the database object 
db = SQLAlchemy() 

# this function is the application factory 
def create_app(environment): 
    app = Flask(__name__) 
    app.config.from_object(config[environment]) 

    db.init_app(app) 

    from bp_root import bp_root 
    from bp_aws import bp_aws 

    app.register_blueprint(bp_root, url_prefix='/') 
    app.register_blueprint(bp_aws, url_prefix='/aws') 

    return app 

그럼 내가 응용 프로그램 패키지 내부 models.py이 :

내가 다음 초기화와 앱 패키지가

from datetime import datetime 
from . import db 

class MyTestClass(db.Model): 
    __tablename__ = 'mytesttable' 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(64), nullable=False, unique=True, index=True) 
    username = db.Column(db.String(64), nullable=False, unique=True, index=True) 
    is_admin = db.Column(db.Boolean) 
    password_hash = db.Column(db.String(128)) 
    location = db.Column(db.String(64)) 
    member_since = db.Column(db.DateTime, default=datetime.utcnow) 
    bio = db.Column(db.Text()) 

    def __init__(self, email, username): 
     self.email = email 
     self.username = username 

    def __repr__(self): 
     return '<User %r>' % self.username 

의 app.config 다른 것들 사이에, 포함을, 다음

'SQLALCHEMY_DATABASE_URL': 'sqlite:////Users/xxxxx/projects/yyyyy/data-dev.sqlite' 

그렇다면 대화 형 셸을 실행하면 개체가 적절하게 존재한다는 것을 알 수 있습니다.) (db.create_all을 위해 전화 d는 일을 나타납니다,하지만 데이터베이스 생성 결과 :

$ ./manage.py shell 
>>> from app import db 
>>> from app import models 
>>> app 
<Flask 'app'> 
>>> db 
<SQLAlchemy engine='sqlite://'> 
>>> models 
<module 'app.models' from '/Users/xxxxx/projects/yyyyy/app/models.py'> 
>>> dir(models) 
['MyTestClass', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'datetime', 'db'] 
>>> db.create_all() 
>>> 

데이터베이스가 만들어지고되지 않는 이유에 대한 어떤 생각?

답변

7

URL이 아니라 SQLALCHEMY_DATABASE_URI이어야합니다. 당신은 당신이 줄을 실행하면 DB가 올바른 URI가없는 것을 볼 수 있습니다 : 그것은 플라스크-SQLAlchemy의은 메모리 SQLite 데이터베이스에 디폴트 것을 알 수

>>> db 
<SQLAlchemy engine='sqlite://'> 

. 설정을 변경하면 효과가 있습니다.

+0

하, 네. 내 코드를 쳐다보고 1 시간을 보냈다. 표시된 SQLAlchemy 출력이 메모리 내장 데이터베이스임을 나타 냈습니다. 이제 난! 눈의 두 번째 세트를 가져 주셔서 감사합니다! – David

+3

올바르게 설정되었을 때'db.engine'을 보면 입력 한 uri가 표시됩니다. – davidism

관련 문제