我最近在使用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')
这里的任何帮助将不胜感激!
答案 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_URI
,SQLALCHEMY_COMMIT_ON_TEARDOWN
),导入,{{ 1}}等。
在那之后,您应该阅读Flask-MySQLdb's documentation来学习如何使用它。