如何强制Flask/SQLAlchemy创建表?
我第一次使用Flask和flask.ext.sqlalchemy,遇到了一个错误,提示说某个表不存在。但我以为对象关系的设置可以处理这个问题,结果好像并没有。我的代码中缺少了什么呢?
from flask import Flask, request, url_for
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.secret_key = 'This is really unique and secret'
db = SQLAlchemy(app)
app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://golfape:mypass@mysql.server/golfape$swarm'
class Suggestion(db.Model):
__tablename__ = 'suggestions'
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(100))
def __init__( self, name ):
self.name = name
@app.route('/')
def get_suggestion():
return """
<p>What do you think swarm prediction could be applied to?</p>
<form method = "POST" action="%s">
<input name="name" />
<input type="submit" value="Go!" />
</form>
""" % (url_for('append_suggestion'),)
@app.route('/suggestions', methods=['POST'] )
def append_suggestion():
name = request.form["name"]
newSuggestion = Suggestion( name = name )
db.session.add( newSuggestion )
db.session.commit()
return """
<p>Thanks for suggesting %s</p>
<p><a href="%s">Back</a></p>
""" % (name, url_for('get_suggestion'))
这是错误信息:
文件 "/usr/local/lib/python2.7/dist-packages/MySQLdb/connections.py",第36行,在defaulterrorhandler中 抛出错误类,错误值 编程错误: (编程错误) (1146, "表 'golfape$swarm.suggestions' 不存在") '插入到 suggestions (name) 值 (%s)' ('钓鱼',)
1 个回答
4
你需要调用 db.create_all() 一次,这样 sqlalchemy 才会创建数据库的结构:
from my_app import Suggestion, db
db.create_all()
而且,你需要把数据库配置的 URL 行放在初始化 db 之前:
app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://golfape:mypass@mysql.server/golfape$swarm'
db = SQLAlchemy(app)
更新 上面提到的问题是关于连接 mysql 数据库以及找到合适的连接器。安装以下模块:
pip install pymysql
然后把你的连接字符串改成这样:
db = SQLAlchemy('mysql+pymysql://user:password@mysql.server/database_name')