Python 烧瓶+;奇怪的行为
我正在构建一个使用现有MySQL数据库的简单web应用程序。这是我第一次使用Flask,在过去的几个小时里,我一直在努力理解我做错了什么 我的简单项目结构:Python 烧瓶+;奇怪的行为,python,mysql,flask,Python,Mysql,Flask,我正在构建一个使用现有MySQL数据库的简单web应用程序。这是我第一次使用Flask,在过去的几个小时里,我一直在努力理解我做错了什么 我的简单项目结构: /root /app __init__.py db.py forms.py views.py /templates base.html index.html login.html config.py run.py 我试图查询我的MySQL数据库,并用查询结果填充模板 My db.py: from ap
/root
/app
__init__.py
db.py
forms.py
views.py
/templates
base.html
index.html
login.html
config.py
run.py
我试图查询我的MySQL数据库,并用查询结果填充模板
My db.py:
from app import app
from flaskext.mysql import MySQL
class DB(object):
mysql = MySQL()
def __init__(self):
app.config['MYSQL_DATABASE_USER'] = 'loguser'
app.config['MYSQL_DATABASE_PASSWORD'] = 'asdzxc'
app.config['MYSQL_DATABASE_DB'] = 'log'
app.config['MYSQL_DATABASE_HOST'] = '127.0.0.1'
app.config['MYSQL_DATABASE_PORT'] = 33006
self.mysql.init_app(app)
def query_db(self):
cursor = self.mysql.connect().cursor()
cursor.execute("SELECT name from users limit 1")
data = cursor.fetchone()
if data is None:
return "No results from query"
else:
return data
在my views.py中,我有以下内容:
from flask import render_template, flash, redirect
from app import app
from .forms import LoginForm
from .db import DB
@app.route('/')
@app.route('/index')
def index():
db = DB()
user = db.query_db()
print(user) (it prints it here so the db connection works)
posts = [ # fake array of posts
{
'author': {'nickname': 'John'},
'body': 'Beautiful day in Portland!'
},
{
'author': {'nickname': 'Susan'},
'body': 'The Avengers movie was so cool!'
}
]
return render_template("index.html",
title='Home',
user=user,
posts=posts)
当我尝试从模板中将“用户”分配给用户时,我会得到“AssertionError”:
AssertionError:在处理第一个请求后调用了设置函数。这通常表示应用程序中存在一个错误,没有导入模块,调用装饰程序或其他功能太迟。要解决此问题,请确保在应用程序开始为请求提供服务之前,在中心位置导入所有视图模块、数据库模型和所有相关内容
我认为我违反了框架的一项主要原则。将数据传递到模板的正确方法是什么?最好使用Flask SQLAlchemy和MySQL python 1.2,下面的链接提供了成功的代码和文档
根据我的经验,我发现MySQl支持至少对Python3不太好,最好使用PostgreSQL,但这只是我个人的观点。现在回答问题已经很晚了,但它可能会帮助一些人 在将任何路由源添加到API之前,必须连接到MySQL 它应该按照
# 1. MySQL setup should be done at first
app = Flask(__name__)
api = Api(app)
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'DataBase'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
conn = mysql.connect()
cursor = conn.cursor()
# 2. Create API resource after that
api.add_resource(CreateUser, '/CreateUser')