2016-07-09 15 views
-1

フラスコを使用してデータベーススキーマを作成しようとしていますので、sqlalchemy-migrateとFlask-Migrateをインストールしました。そして、私はここでdb_create.pyFlaskはテーブルを作成しません

#!/usr/bin/python 
from migrate.versioning import api 
from config import SQLALCHEMY_DATABASE_URI 
from app import db 
import os.path 
db.create_all() 

がここに私のですDBがすでに作成されているが、私はdb_create.py

を使用してmodels.pyからテーブルを作成することはできませんPythonのdb_create.pyに

を走りましたmodels.py

from core import db 
from datetime import * 

class User(db.Model): 
    __tablename__= "users" 
    id = db.Column('user_id', db.Integer, primary_key=True) 
    username = db.Column('username', db.String(20), unique=True, index=True) 
    password = db.Column('password', db.String(10)) 
    email = db.Column('email', db.String(50), unique=True, index=True) 
    registered_on = db.Column('registered_on', db.DateTime) 
    todos = db.relationship('Todo', backref='user', lazy='dynamic') 

    def __init__(self, username, password, email): 
     self.username = username 
     self.password = password 
     self.email = email 
     self.registered_on == datetime.utcnow() 

    def set_password(self, password): 
     self.password = generate_password_hash(password) 

    def check_password(self, password): 
     return check_password_hash(self.password, password) 

    def is_authentificated(self): 
     return True 

    def is_active(self): 
     return True 

    def is_anonymous(self): 
     return False 

    def get_id(self): 
     return unicode(self.id) 

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


class Todo(db.Model): 
    __tablename__ = 'todos' 
    id = db.Column('todo_id', db.Integer, primary_key=True) 
    title = db.Column(db.String(255)) 
    text = db.Column(db.String) 
    done = db.Column(db.Boolean) 
    #pub_date = db.Column(db.Datetime) 
    user_id = db.Column(db.Integer, db.ForeignKey('users.user_id')) 


    def __init__(self, title, text): 
     self.title = title 
     self.text = text 
     self.done = False 
     self.pub_date = datetime.utcnow() 

は、ここに私のconfig.pyある

import os 
basedir = os.path.abspath(os.path.dirname(__file__)) 


SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected]/todo" 


class Config(object): 
    DEBUG = False 
    TESTING = False 
    CSRF_ENABLED = True 
    SECRET_KEY ="An6cGY8ezvAcoZ5pGJuBU9vY0GC1XWjfDg6za7oGd76wVMTCFL" 
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected]/todo" 



class StagingConfig(Config): 
    DEVELOPMENT = True 
    DEBUG = True 


class DevelopmentConfig(Config): 
    DEVELOPMENT = True 
    DEBUG = True 


class TestingConfig(Config): 
    TESTING = True 
class ProductionConfig(Config): 
    DEBUG = False 

ここに私のapp.py

#!/usr/bin/python env 

from flask import Flask, session, request, flash, url_for, redirect, render_template, jsonify, abort ,g 
from flask_login import login_user, logout_user, current_user, login_required, LoginManager 
from stock_scraper import get_data 
from models import * 
from flask_sqlalchemy import SQLAlchemy 
from werkzeug.security import generate_password_hash, check_password_hash 
import os 


app = Flask(__name__) 
app.config.from_pyfile('config.py') 
db = SQLAlchemy(app) 

@app.route("/data") 
#@login_required 
def data(): 
    return jsonify(get_data()) 


@app.route("/") 
@login_required 
def index(): 
    return render_template("index.html") 



@app.route('/register', methods=['GET', 'POST']) 
def register(): 
    if request.method == 'GET': 
     return render_template('register.html') 

    user = User(request.form['username'], request.form['password'], request.form['email']) 
    db.session.add(user) 
    db.session.commit() 
    flash('User successfully registred') 
    return redirect(url_for('login')) 

@app.route('/login', methods=['GET', 'POST']) 
def login(): 
    if request.method == 'GET': 
     return render_template('login.html') 
    username = request.form['username'] 
    password = request.form['password'] 

    if username=='admin' and password=='admin': 
     flash('Logged in successfully') 
     return redirect(url_for('data')) 
    flash('Username or Password is invalid', 'error') 
    return redirect(url_for('login')) 



@app.route('/logout') 
def logout(): 
    logout_user() 
    return redirect(url_for('index')) 


if __name__ == '__main__': 

    app.secret_key = "An6cGY8ezvAcoZ5pGJuBU9vY0GC1XWjfDg6za7oGd76wVMTCFL" 

    login_manager = LoginManager() 
    login_manager.init_app(app) 
    login_manager.login_view = 'login' 

    port = int(os.environ.get('PORT', 5000)) 
    app.run(host='0.0.0.0', port=port, debug=True) 

そして、ここではcore.pyです

from flask_sqlalchemy import SQLAlchemy 
db = SQLAlchemy() 

すべてのファイルあなたはcore.pyでデータベース接続を作成するのと同じディレクトリに

+0

このスクリプトはどこで実行していますか? models.pyについて知っておく必要があります。 –

+0

同じディレクトリにあります:コアimport dbからの –

答えて

1

を常駐。モデルモジュールにインポートします。

しかしapp.pyに、あなたはあなたのモデルについては何も知らない新しいDBオブジェクトを作成している:

db = SQLAlchemy(app) 

ので、自然にスクリプトがアクセスできない、あなたのDB_CREATEスクリプトによってインポートされている何がモデルに。

コアと同じdbをapp.pyでインポートする必要があります。それはモデルについて知っている。

from core import db 
... 
db.init_app(app) 
+0

行はmodels.pyにありますが、モデルからすべてインポートしてもapp.pyに追加することができます –

関連する問題