Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

AttributeError: 'NoneType' object has no attribute 'drivername' URI config implementation wrong

I see a lot of people with this error but nothing fixes it for me. I’m using a config.py file to hold my config classes. This seems to be where the issue lies. I’m also using the application factory pattern. I call the object in my __init__.py:

from flask import Flask, request
from flask_restful import Api, Resource, reqparse, abort
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_marshmallow import Marshmallow

import config

# Globally accessible libraries
db:SQLAlchemy = SQLAlchemy()
api:Api = Api()
migrate:Migrate = Migrate()
ma:Marshmallow = Marshmallow()


def init_app():
    """Initialize the core application."""
    app = Flask(__name__, instance_relative_config=False)
    app.config.from_object(config.Config)

    # Initialize Plugins
    db.init_app(app)
    api.init_app(app)
    migrate.init_app(app, db)
    ma.init_app(app)

    with app.app_context():

        # Include our Routes

And when I run the program I get this error

  File "/home/sai/.local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 933, in apply_driver_hacks
    if sa_url.drivername.startswith('mysql'):
AttributeError: 'NoneType' object has no attribute 'drivername'

Here is my config.py:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

import os
from pickle import TRUE

class Config(object):
    DEBUG = False
    TESTING = False
    CSRF_ENABLED = True
    SQLALCHEMY_DATABASE_URI = os.environ.get("DATABASE_URL")
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SESSION_COOKIE_SECURE = True
    SESSION_COOKIE_HTTPONLY = True
    SECRET_KEY = os.environ.get("SECRET_KEY")

class ProductionConfig(Config):
    DEBUG = False
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class DevelopmentConfig(Config):
    ENV = "development"
    DEBUG=True
    TESTING = True
    DEVELOPMENT = True
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class SetupConfig(DevelopmentConfig):
    SQLALCHEMY_DATABASE_URI = "sqlite:///database.db"

I’m using the default .env loader that flask provides described here and I made sure my uri in my .env didn’t have quotes around it just like the guide I used. Here is a snippet of .env:

DEBUG=True
FLASK_ENV=development
FLASK_APP=wsgi.py
DATABASE_URL = mysql+pymysql://user:password@host/main

The only thing that gets my app to run is if I hard code the URI with app.config['SQLALCHEMY_DATABASE_URI'} = ... but that solution doesn’t help me as I don’t want to push the URI to a public repo. I’ve spent 4 hours of my day just moving things around hoping to fix it and I’m genuinely just lost. Any help would be hugely appreciated thank you!

>Solution :

I think you might need to put load_env() in your Config class. I understand that flask has it’s own way to reading .env files but maybe try it.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading