SQLAlchemy: объект NoneType не имеет атрибута drivername - PullRequest
0 голосов
/ 20 октября 2019

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

Это мои локальные переменные env для моего проекта:

#.env
LOCAL_MYSQL_URL = mysql://Username:somePassword@127.0.0.1:3306/database_name
SECRET_KEY = 'someverylongstring'

Этоmy project_name __init__ file:

#__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os

ON_HEROKU = 'ON_HEROKU' in os.environ

if ON_HEROKU:
    DB_URL = os.environ.get('CLEARDB_DATABASE_URL')
else:
    DB_URL = os.environ.get('LOCAL_MYSQL_URL')

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')

db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = 'example'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

db.create_all()
db.session.commit()

admin = User('admin', 'admin@example.com')
guest = User('guest', 'guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()

users = User.query.all()
print(users)

И, наконец, это моя точка входа:

#run.py
from project_name import app

if __name__ == '__main__':
    app.run(debug=True)

Однако я получаю следующую ошибку после длинной трассировки стека в библиотеке SQLAlchemy:

  if sa_url.drivername.startswith('mysql'):
AttributeError: 'NoneType' object has no attribute 'drivername'

Я пытаюсь сделать эту работу, следуя учебным пособиям и ответам, приведенным здесь на stackoverlow к аналогичным вопросам, но ни один из них не помог мне до сих пор.

Что мне здесь не хватает? Что не так с моим именем драйвера mysql?

1 Ответ

1 голос
/ 20 октября 2019

Убедитесь, что URI SQLAlchemy напоминает этот формат после pip install pymysql

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://{DB_USERNAME}:{DB_PASSWORD}@localhost:3306/{DB_NAME}'
...