首页 文章

python - Flask-sqlalchemy:sqlalchemy.exc.InvalidRequestError

提问于
浏览
0

我正在为我的iOS应用程序构建后端,我选择使用Flask框架 .

对于数据库部分,我使用 flask-sqlalchemy 连接我的 mysql 数据库 .

当我将所有测试代码放在 single 文件中时,一切正常 .

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
└── venv

config.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:已为此MetaData实例定义表'player' . 指定'extend_existing = True'以重新定义现有Table对象上的选项和列 .

And when I check the database, I found that table player is created.

似乎sqlalchemy正在尝试重复创建表 .

这是为什么?

1 回答

  • 0

    尝试

    from app import models
    

    代替

    import models
    

    您正在创建循环导入 . 有关循环导入的更多信息,请参阅link

相关问题