flask-starter icon indicating copy to clipboard operation
flask-starter copied to clipboard

Unable to flask initdb - Error opening / creating sqlite DB

Open prlombaard opened this issue 1 year ago • 4 comments

I'm using Windows.

I've set the FLASK_APP and FLASK_ENV environment variables.

When i run flask initdb from the commandline i get various errors pertaining to creating a db using sqlite...

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file (Background on this error at: https://sqlalche.me/e/14/e3q8)

prlombaard avatar Sep 26 '22 18:09 prlombaard

Same! Shame because this looks really nice.

$ flask initdb
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\necer\.virtualenvs\full-flask-template\Scripts\flask.exe\__main__.py", line 7, in <module>
  File "C:\Users\necer\.virtualenvs\full-flask-template\Lib\site-packages\flask\cli.py", line 994, in main
    cli.main(args=sys.argv[1:])
  File "C:\Users\necer\.virtualenvs\full-flask-template\Lib\site-packages\flask\cli.py", line 600, in main
    return super().main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\necer\.virtualenvs\full-flask-template\Lib\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "C:\Users\necer\.virtualenvs\full-flask-template\Lib\site-packages\click\core.py", line 1651, in invoke
    cmd_name, cmd, args = self.resolve_command(ctx, args)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\MY WEBSITES\full-flask-template\flask-starter\flaskstarter\extensions.py", line 11, in <module>
    db = SQLAlchemy()
         ^^^^^^^^^^^^
  File "C:\Users\necer\.virtualenvs\full-flask-template\Lib\site-packages\flask_sqlalchemy\__init__.py", line 758, in __init__
    _include_sqlalchemy(self, query_class)
  File "C:\Users\necer\.virtualenvs\full-flask-template\Lib\site-packages\flask_sqlalchemy\__init__.py", line 112, in _include_sqlalchemy
    for key in module.__all__:
               ^^^^^^^^^^^^^^
AttributeError: module 'sqlalchemy' has no attribute '__all__'. Did you mean: '__file__'?

Neceros avatar Apr 27 '23 23:04 Neceros

It works when you just remove all version requirements from requirements.txt

As of Sep 20, 2023, I got these versions to work:

   1   │ Package           Version
   2   │ ----------------- -----------
   3   │ asgiref           3.7.2
   4   │ attrs             23.1.0
   5   │ blinker           1.6.2
   6   │ cachelib          0.9.0
   7   │ click             8.1.7
   8   │ defusedxml        0.7.1
   9   │ dnspython         2.4.2
  10   │ email-validator   2.0.0.post2
  11   │ exceptiongroup    1.1.3
  12   │ Flask             2.3.3
  13   │ Flask-Admin       1.6.1
  14   │ Flask-Caching     2.0.2
  15   │ Flask-Login       0.6.2
  16   │ Flask-Mail        0.9.1
  17   │ Flask-SQLAlchemy  3.1.1
  18   │ Flask-WTF         1.1.1
  19   │ Glances           3.4.0.3
  20   │ greenlet          2.0.2
  21   │ idna              3.4
  22   │ iniconfig         2.0.0
  23   │ itsdangerous      2.1.2
  24   │ Jinja2            3.1.2
  25   │ MarkupSafe        2.1.3
  26   │ packaging         23.1
  27   │ pip               23.2.1
  28   │ pluggy            1.3.0
  29   │ psutil            5.9.5
  30   │ py                1.11.0
  31   │ pytest            7.4.2
  32   │ setuptools        68.2.2
  33   │ SQLAlchemy        2.0.21
  34   │ tomli             2.0.1
  35   │ typing_extensions 4.8.0
  36   │ ujson             5.7.0
  37   │ Werkzeug          2.3.7
  38   │ wheel             0.41.2
  39   │ WTForms           3.0.1

KastanDay avatar Sep 20 '23 17:09 KastanDay

Seems like the issue is based on compatibility between sqlalchemy and Flask-sqlAlchemy.

Add this line to the bottom of your requirements.txt SQLAlchemy>=1.3.0,<2.0.0

anthonyaITL avatar Nov 07 '23 19:11 anthonyaITL

As of Dec' 2023, It's working with the latest version along with few tweaks in the code:

  1. In flaskstarter/frontend/forms.py: Replace from flask import Markup with from markupsafe import Markup

  2. In flaskstarter/config.py: Replace (or Comment Out) SQLALCHEMY_DATABASE_URI = 'sqlite:///' + INSTANCE_FOLDER_PATH + '/db.sqlite' with SQLALCHEMY_DATABASE_URI = 'sqlite:///db.sqlite'

  3. Use the Below working requirements.txt Instead:

blinker==1.7.0
cachelib==0.9.0
click==8.1.7
colorama==0.4.6
dnspython==2.4.2
email-validator==2.1.0.post1
exceptiongroup==1.2.0
Flask==3.0.0
Flask-Admin==1.6.1
Flask-Caching==2.1.0
Flask-Login==0.6.3
Flask-Mail==0.9.1
Flask-SQLAlchemy==3.1.1
Flask-WTF==1.2.1
greenlet==3.0.3
idna==3.6
importlib-metadata==7.0.1
iniconfig==2.0.0
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
packaging==23.2
pluggy==1.3.0
pytest==7.4.3
SQLAlchemy==2.0.24
tomli==2.0.1
typing_extensions==4.9.0
Werkzeug==3.0.1
WTForms==3.1.1
zipp==3.17.0

bISTP avatar Dec 29 '23 09:12 bISTP