Creando la base de datos con SQLAlchemy en Flask

Me gustaría saber qué debo hacer para crear la base de datos SQLAlchemy en Flask. De acuerdo con la documentación , debería crear un modelo en mi aplicación Flask y luego ir al shell de Python y simplemente crearlo utilizando db.create_all () . Pero eso no funciona.

Mi aplicación Frasco:

import os import flask import settings from flask_sqlalchemy import SQLAlchemy app = flask.Flask(__name__) app.config['SESSION_TYPE'] = 'filesystem' app.secret_key = os.urandom(24) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////database.db' db = SQLAlchemy(app) (...) 

Modelo:

 from app import db class User(db.Model): id = db.Column(db.Integer, primary_key = True) username = db.Column(db.String(15), unique = True) password = db.Column(db.String(15), unique = True) tasks = db.relationship('Task', backref='author', lazy='dynamic') def __init__(self, username, password): self.username = username self.password = password class Task(db.Model): id = db.Column(db.Integer, primary_key = True) scene = db.Column(db.String(140), nullable = False) state = db.Column(db.Integer(1), nullable = False) progress = db.Column(db.Integer(3), nullable = False) add_date = db.Column(db.DateTime, nullable = False) start_date = db.Column(db.DateTime, nullable = False) finish_date = db.Column(db.DateTime, nullable = False) rendered_scene = db.Column(db.String(140)) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 

Código de error:

 >>> from app import db >>> db.create_all() Traceback (most recent call last): File "", line 1, in  File "C:\Python27\lib\site-packages\flask_sqlalchemy\__init__.py", line 895, in create_all self._execute_for_all_tables(app, bind, 'create_all') File "C:\Python27\lib\site-packages\flask_sqlalchemy\__init__.py", line 887, in _execute_for_all_tables op(bind=self.get_engine(app, bind), **extra) File "C:\Python27\lib\site-packages\sqlalchemy\sql\schema.py", line 3420, in create_all tables=tables) File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1727, in_run_visitor with self._optional_conn_ctx_manager(connection) as conn: File "C:\Python27\lib\contextlib.py", line 17, in __enter__ return self.gen.next() File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1720, in_optional_conn_ctx_manager with self.contextual_connect() as conn: File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1910, incontextual_connect self.pool.connect(), File "C:\Python27\lib\site-packages\sqlalchemy\pool.py", line 338, in connect return _ConnectionFairy._checkout(self) File "C:\Python27\lib\site-packages\sqlalchemy\pool.py", line 645, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\Python27\lib\site-packages\sqlalchemy\pool.py", line 440, in checkout rec = pool._do_get() File "C:\Python27\lib\site-packages\sqlalchemy\pool.py", line 1058, in _do_get return self._create_connection() File "C:\Python27\lib\site-packages\sqlalchemy\pool.py", line 285, in _create_connection return _ConnectionRecord(self) File "C:\Python27\lib\site-packages\sqlalchemy\pool.py", line 411, in __init__ self.connection = self.__connect() File "C:\Python27\lib\site-packages\sqlalchemy\pool.py", line 539, in __connect connection = self.__pool._creator() File "C:\Python27\lib\site-packages\sqlalchemy\engine\strategies.py", line 96, in connect connection_invalidated=invalidated File "C:\Python27\lib\site-packages\sqlalchemy\util\compat.py", line 199, in raise_from_cause reraise(type(exception), exception, tb=exc_tb) File "C:\Python27\lib\site-packages\sqlalchemy\engine\strategies.py", line 90, in connect return dialect.connect(*cargs, **cparams) File "C:\Python27\lib\site-packages\sqlalchemy\engine\default.py", line 377, in connect return self.dbapi.connect(*cargs, **cparams) sqlalchemy.exc.OperationalError: (OperationalError) unable to open database file None None 

Tienes demasiados / en la base de datos uri. El formato es dialect+driver://user:pass@host:port/db_name . Con SQLite, db_name es la ruta a la base de datos. Ha especificado la ruta de acceso absoluta /database.db , lo que significa que está intentando crear la base de datos en el directorio raíz del sistema de archivos.

El uso de sqlite:///database.db (una ruta relativa) creará la base de datos en (relativa a) el directorio de trabajo actual.

Es probable que desee especificar una ruta absoluta, pero comstackrla en función de la ubicación del proyecto, ya que podría ejecutar la aplicación desde otra carpeta. Suponiendo que desea crear la base de datos en el mismo directorio que el código de configuración de la aplicación, __file__ una ruta relativa a __file__ .

 db_path = os.path.join(os.path.dirname(__file__), 'app.db') db_uri = 'sqlite:///{}'.format(db_path) app.config['SQLALCHEMY_DATABASE_URI'] = db_uri 

Corte y pegue su modelo sin la primera línea de su aplicación de matraz, luego cree un archivo python junto a su aplicación de matraz, ábralo y escriba esto.

 from app import db db.create_all() 

Puede resolver su problema con la ejecución de este archivo.