AttributeError:“ MySQL”对象没有属性“ Model”

时间:2018-07-14 12:57:53

标签: python mysql flask sqlalchemy

我最近在使用SQLite数据库构建Flask应用程序时遇到了数据库锁定问题。显然,这没有真正的解决方案,从我阅读的所有内容来看,最好的解决方法似乎是切换到MySQL或PostgreSQL这样的“真实”数据库。但是在执行此操作时,我遇到了以下问题:

AttributeError: 'MySQL' object has no attribute 'Model'

我猜这里的问题是-我不确定我是否在我的app.py文件中正确配置了它和/或我不确定我是否在我的models.py中使用了正确的'syntax(?)'文件。或者可能都不是这些……无论哪种方式,如果有人可以看一下我的代码并告诉我发生了什么事情,我将非常感激...

这是我的app.py [无关紧要]

from flask import Flask
from flask_mysqldb import MySQL
from flask_bootstrap import Bootstrap
from flask_mail import Mail, Message 
from flask_moment import Moment 
from flask_login import LoginManager, login_required 
from flask_pagedown import PageDown 
from flask_migrate import Migrate, MigrateCommand
from flask_sslify import SSLify
from werkzeug.wsgi import DispatcherMiddleware
from flask_script import Manager 

server=flask.Flask(__name__)

basedir = os.path.abspath(os.path.dirname(__file__))

server.config['SQLALCHEMY_DATABASE_URI'] = 
'mysql+pymysql://username:password@localhost/db_name'

server.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
server.config.update(dict(
SECRET_KEY="....",
WTF_CSRF_SECRET_KEY="...."
#SECRET_KEY="powerful secretkey",
#WTF_CSRF_SECRET_KEY="a csrf secret key" 
))

manager = Manager(server)
db = MySQL(server) 
#db = SQLAlchemy(server) [Old Code]
migrate = Migrate(server, db)
manager.add_command('db', MigrateCommand) 

这是我的模型。py:

from datetime import datetime 
from werkzeug.security import generate_password_hash, 
check_password_hash
from flask import request, current_app, url_for 
from hashlib import md5
from app import db
from app import login_manager
from flask import request, current_app
from flask_login import UserMixin, AnonymousUserMixin  
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
import hashlib 
from markdown import markdown
import bleach
from datetime import datetime 

class Role(db.Model): 
    __tablename__ = 'roles'
    __table_args__ = {'extend_existing': True} 
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(64), unique=True)
    default = db.Column(db.Boolean, default=False, index=True)
    permissions = db.Column(db.Integer) 
    users = db.relationship('User', backref='role', lazy='dynamic')

这里的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

如果要通过SQLAlchemy(Flask-SQLAlchemy)使用MySQL,请保留数据库实例的旧代码:

# db = MySQL(server)  # remove this line and the import for flask_mysqldb 
db = SQLAlchemy(server)  # keep this and the import for flask_sqlalchemy

否则,如果要由Flask-MySQLdb使用,则应删除SQLAlchemy(Flask-SQLAlchemy)中的所有内容,包括配置变量(SQLALCHEMY_DATABASE_URISQLALCHEMY_COMMIT_ON_TEARDOWN),导入,{{ 1}}等。

在那之后,您应该阅读Flask-MySQLdb's documentation来学习如何使用它。