2014-02-13 45 views
3

run.pyOperationalError沒有這種表在燒瓶中的SQLAlchemy

if __name__ == '__main__': 
    config() 
    app.run() 

main.py

import database 

app = Flask(__name__) 

def config(): 
    app.config.from_object('config.DevConfig') 

    # Run SQLAlchemy _that uses app.config_ and add entities if in DEBUG mode 
    database.init_db(app) 

    import blueprints.auth 
    app.register_blueprint(blueprints.auth.auth) 

database.py

db = None 

def init_db(app): 
    global db 
    db = SQLAlchemy(app) 

    from models import User, Interest, Event 

    if app.config['DEBUG']: 
     print 'Recreating all db' 
     db.create_all() # I DO create everything 
     print 'Loading test data' 
     ... (here I add some Users and etc. and everything works fine - tests pass) 

models.py

from database import db 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(80), unique=True) 
    email = db.Column(db.String(120), unique=True) 
... 

藍圖/ auth.py

from models import User 

auth = Blueprint('auth', __name__) 

@auth.route('/') 
def index(): 
    return str(User.query.get(1).interests) 

所以我得到

OperationalError: (OperationalError) no such table: user u'SELECT user.id AS user_id, user.username AS user_username, user.email AS user_email, user.passhash AS user_passhash, user.vk_page AS user_vk_page \nFROM user \nWHERE user.id = ?' (1,) 

我在做什麼錯?

+2

表'user'實際上是否最終在數據庫中創建?你有沒有檢查另一個程序? –

+1

'db.create_all()'只在調試模式下執行。那是故意的嗎? – dnll

回答

9

我不得不爲了使所有的工作都改變。

  1. SQLALCHEMY_DATABASE_URI parametr取代DATABASE_URI在配置
  2. /tmp/test.db

現在它工作正常更換:memory: sqlite的地址。

+1

+1000 ... geez,令人沮喪。 'db.create_all()'是$ @#&* ^#* *帶有內存中的sqlite ...好的... –

+6

這種行爲的解釋:http://gehrcke.de/2015/05/in-memory- sqlite-database-and-flask-a-threading-trap/ –

+0

我知道如何完成這個答案的第一部分,但我不確定第二部分是什麼意思。我假設':memory:'地址需要設置爲'SQLALCHEMY_DATABASE_URI',但我不知道該怎麼做。我需要將什麼附加到我的'config.py'文件中? – sudosensei

相關問題