我正在为我的iOS应用程序构建一个后端,我选择使用Flask框架。
对于数据库部分,我使用flask-sqlalchemy连接我的mysql数据库。
当我将所有测试代码放入一个单个文件中时,一切都正常。
test.py
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:pwd@localhost/test"
db = SQLAlchemy(app)
class player(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username
db.create_all()但是,当我将代码分割成不同的文件以使整个项目结构化时,我就得到了一个错误。
这是我的文件结构:
.
├── config.py
├── app.py
├── app
├── __init__.py
├── api.py
└── models.py
└── venvconfig.py
SQLALCHEMY_DATABASE_URI = "mysql://root:pwd@localhost/test"app.py
from app import app
if __name__ == '__main__':
app.run(debug=True)__init.py__
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config
app = Flask(__name__)
app.config.from_object("config")
db = SQLAlchemy(app)
import models
db.create_all()models.py
from app import db
class player(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username当我运行__init__.py来创建models.py中的所有表时,我得到了错误
sqlalchemy.exc.InvalidRequestError:表'player‘已经为这个MetaData实例定义了。指定“extend_existing=True”以重新定义现有表对象上的选项和列。
当我检查数据库时,我发现创建了表player 。
看起来sqlalchemy试图反复创建表。
为什么会这样呢?
发布于 2017-02-08 01:38:57
https://stackoverflow.com/questions/37051896
复制相似问题