vendredi 4 mars 2016

OperationalError: unable to open database file: sqlalchemy

I am creating an flask api on ubuntu server. My code runs on native machine but why deploying it I get OperationalError: (sqlite3.OperationalError) unable to open database file.

Code:

#! /root/anaconda/bin/python
from flask import Flask,jsonify, request
from models import UsersLoginInfo,Base
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy import create_engine
import sqlalchemy.pool

sqlite = sqlalchemy.pool.manage(sqlite3, poolclass=sqlalchemy.pool.SingletonThreadPool)
engine = sqlite.create_engine('sqlite:///userslogininfo.db')

Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()
app=Flask(__name__)

@app.route('/login',methods=['POST'])
def home():
    data_rec = {'username' : request.json['username'], 'password' : request.json['password']}
    users = [i.serialize['username'] for i in session.query(UsersLoginInfo).all()]
    passwords = [i.serialize['password'] for i in session.query(UsersLoginInfo).all()]
    login=False
    try:
        user_index=users.index(unicode(data_rec['username']))
        password_from_db=passwords[user_index]
        if password_from_db==data_rec['password']:
            login=True
            msg=None
        else:
            msg="Wrong password entered."
    except ValueError:
        msg="There is no user with that username, please create an account."
    return jsonify({'login' : login ,"msg": msg})

@app.route('/create',methods=['POST'])
def create():
    data_rec = {'username' : request.json['username'], 'password' : request.json['password']}
    users = [i.serialize['username'] for i in session.query(UsersLoginInfo).all()]
    if data_rec['username'] in users: #check account exists
        account_exists=True
        msg="An account with that username already exists, please choose another username."
    else:
        account_exists=False
        id=len(users)
        user = UsersLoginInfo(username = unicode(data_rec['username']), password = unicode(data_rec['password']), id = id)
        session.add(user)
        session.commit()
        msg="Your account has been created. Please login with it."
    return jsonify({'account_exists' : account_exists ,"msg": msg})

if __name__ == "__main__":
    app.run()

Error(from /var/log/apache2/error.log):

OperationalError: (sqlite3.OperationalError) unable to open database file

References: Frequent "OperationalError: unable to open database file" with in memory sqlite3 database

sqlite3 "OperationalError: unable to open database file" in python only when I deploy my flask app in apache2 or nginx

Aucun commentaire:

Enregistrer un commentaire