Невозможно создать sqlite3 db через консоль, как показано в книге Flask Web Development

Вопрос: Я не уверен, в чем проблема, поэтому я дам как можно больше информации, и, надеюсь, кто-то поймает, что происходит не так. В книге показано, как создавать объекты, которые SQLAlchemy будет использовать для создания базы данных. Затем с консоли я должен сделать следующее: (venv) $ python hello.py shell >>> from hello import db >>> db.create_all()

Вопрос:

Я не уверен, в чем проблема, поэтому я дам как можно больше информации, и, надеюсь, кто-то поймает, что происходит не так.

В книге показано, как создавать объекты, которые SQLAlchemy будет использовать для создания базы данных. Затем с консоли я должен сделать следующее:

(venv) $ python hello.py shell >>> from hello import db >>> db.create_all()

Предполагается создать файл базы данных в моем каталоге приложений, которого нет. Строка из hello import db отлично работает.

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

db.create_all() возвращает никаких ошибок, однако файл базы данных не создается в моем каталоге приложений. Я хочу привлечь внимание к этой строке (это правильно?):

app.config[‘SQLALECHMY_DATABASE_URI’] = ‘sqlite:///’ + os.path.join(basedir, ‘data.sqlite’) #Final value: ‘sqlite:////home/nick/dev/flare/data.sqlite’

Вот мой весь файл hello.py:

import os from flask import Flask, render_template, session, url_for, redirect, flash from flask.ext.script import Manager from flask.ext.bootstrap import Bootstrap from flask.ext.moment import Moment from flask.ext.wtf import Form from flask.ext.sqlalchemy import SQLAlchemy from wtforms import StringField, SubmitField from wtforms.validators import Required basedir = os.path.abspath(os.path.dirname(__file__)) app = Flask(__name__) app.config[‘SECRET_KEY’] = ‘random key’ app.config[‘SQLALECHMY_DATABASE_URI’] = ‘sqlite:///’ + os.path.join(basedir, ‘data.sqlite’) #Final value: ‘sqlite:////home/nick/dev/flare/data.sqlite’ app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN’] = True manager = Manager(app) bootstrap = Bootstrap(app) moment = Moment(app) db = SQLAlchemy(app) class Role(db.Model): __tablename__ = ‘roles’ id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(64), unique = True) users = db.relationship(‘User’, backref=’role’) def __repr__(self): return ‘<Role %r>’ % self.name class User(db.Model): __tablename__ = ‘users’ id = db.Column(db.Integer, primary_key = True) username = db.Column(db.String(64), unique = True, index = True) role_id = db.Column(db.Integer, db.ForeignKey(‘roles.id’)) def __repr__(self): return ‘<User %r>’ % self.username class NameForm(Form): name = StringField(‘What is your name’, validators=[Required()]) submit = SubmitField(‘Submit’) @app.route(‘/’, methods=[‘GET’, ‘POST’]) def index(): form = NameForm() if form.validate_on_submit(): old_name = session.get(‘name’) if old_name is not None and old_name != form.name.data: flash(‘Looks like you have changed your name’) session[‘name’] = form.name.data form.name.data = » return redirect(url_for(‘index’)) return render_template(‘index.html’, form=form, name=session.get(‘name’)) @app.route(‘/user/<name>’) def user(name): return render_template(‘user.html’, name=name) @app.errorhandler(404) def page_not_found(e): return render_template(‘404.html’), 404 @app.errorhandler(500) def internal_server_error(e): return render_template(‘500.html’), 500 if __name__ == «__main__»: manager.run() Лучший ответ:

У вас есть опечатка в конфигурации:

app.config[‘SQLALECHMY_DATABASE_URI’] =

Что SQLALCHEMY орфографии SQLALCHEMY, это должно быть:

app.config[‘SQLALCHEMY_DATABASE_URI’] =

Поскольку вы ошибочно написали его, используется sqlite:// по умолчанию, база данных в памяти.

Оцените статью
Добавить комментарий