OperationalError pas de table dans la Fiole avec SQLAlchemy
run.py
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)
...
blueprints/auth.py
from models import User
auth = Blueprint('auth', __name__)
@auth.route('/')
def index():
return str(User.query.get(1).interests)
Et si je reçois
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,)
Ce que je fais mal?
A la table
user
en fait être créé dans la base de données? Avez-vous vérifié avec un autre programme?db.create_all()
n'est exécuté en mode de débogage. Est-ce intentionnel?OriginalL'auteur Ben Usman | 2014-02-13
Vous devez vous connecter pour publier un commentaire.
Il y avait peu de choses que j'ai dû changer pour faire fonctionner le tout.
DATABASE_URI
avecSQLALCHEMY_DATABASE_URI
parametr dans la configuration:memory:
sqlite adresse avec/tmp/test.db
Maintenant il fonctionne très bien.
db.create_all()
est $@#&*^#* avec sqlite en mémoire ... ok ...L'explication de ce comportement: gehrcke.de/2015/05/...
Je comprends la façon de remplir la première partie de cette réponse, mais je ne suis pas sûr de ce que tu veux dire par la deuxième partie. Je suppose que le
:memory:
répondre aux besoins égale àSQLALCHEMY_DATABASE_URI
, mais je ne suis pas sûr de la façon de le faire. Que dois-je ajouter à monconfig.py
fichier?cela signifie simplement, ne pas utiliser le stockage en mémoire 🙂 si vous avez utilisé
:memory:
avant, ne l'est pas. Si vous n'avez pas, vous êtes bon.Ma question était en fait quelque chose de différent. Merci pour la réponse rapide!
OriginalL'auteur Ben Usman