赞
踩
I am running into an issue with my flask web server. I get an error message once I add from flask_mysqldb import MySQL as well as the SQL script into my source file. I get this message:
$ python app.py Traceback (most recent call last): File "app.py", line 3, in from flask_mysqldb import MySQL File
"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/flask_mysqldb/init.py",
line 1, in import MySQLdb File
"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/MySQLdb/init.py",
line 18, in import _mysql ImportError:
dlopen(/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/_mysql.cpython-37m-darwin.so,
2): Library not loaded: @rpath/libmysqlclient.21.dylib Referenced
from:
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/_mysql.cpython-37m-darwin.so
Reason: image not found**
I am wondering if it has to do with me using python 3.7. The flask mysqldb doc says that it supports Python 2.7, 3.4 and 3.5. Should I be using an older version of python? Your input is much apprenticed!
Here is the source code:
from flask import Flask, render_template, flash, redirect, url_for, session, request, logging
from data import Articles
from flask_mysqldb import MySQL
from wtforms import Form, StringField, TextAreaField, PasswordField, validators
from passlib.hash import sha256_crypt
app = Flask(__name__)
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = '123456'
app.config['MYSQL_DB'] = 'myflaskapp'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'
mysql = MySQL(app)
Articles = Articles()
@app.route("/")
@app.route("/home")
def home():
return render_template('home.html')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/articles')
def articles():
return render_template('articles.html', articles = Articles)
@app.route('/article//')
def article(id):
return render_template('article.html', id = id)
class RegisterForm(Form):
name = StringField('Name', [validators.Length(min=1, max=50)])
username = StringField('Username', [validators.Length(min=4, max=25)])
email = StringField('Email', [validators.Length(min=6, max=50)])
password = PasswordField('Password', [
validators.DataRequired(),
validators.EqualTo('Confirm', message='Passwords do not match')
])
confirm = PasswordField('Confirm Password')
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm(request.form)
if request.method == 'POST' and form.validate():
name = form.name.data
email = form.email.data
username = form.username.data
password = sha256_crypt.encrypt(str(form.password.data))
# Create cursor
cur = mysql.connection.cursor()
# Execute query
cur.execute("INSERT INTO users(name, email, username, password) VALUES(%s, %s, %s, %s )", (name, email, username, password))
#Commit to DB
mysql.connection.commit()
#close connection
cur.close()
flash('You are now registered and can now log in', 'success')
redirect(url_for('index'))
return render_template('register.html', form=form)
if __name__ == '__main__':
app.run(debug=True)
解决方案
I've been following the same programming tutorial as you and I got everything working using Python 3.7. The only difference is that I'm using Linux and you're using MacOS. The problem here is not Python 3.7. Instead, the problem is indicated by this snippet:
Library not loaded: @rpath/libmysqlclient.21.dylib Referenced from: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/_mysql.cpython-37m-darwin.so Reason: image not found**
The problem is that the MySQL package can't find the dynamic library _mysql.cpython-37m-darwin.so as discussed in another thread.
The dynamic library should be available in the /usr/local/mysql/lib directory. If it is in that directory, then you just need to modify the $DYLD_LIBRARY_PATH variable with the following command:
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/:$DYLD_LIBRARY_PATH.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。