mysql python -flask-sql炼金术:sqlalchemy.exc.InvalidRequestError

epggiuax  于 2023-03-11  发布在  Mysql
关注(0)|答案(1)|浏览(180)

我正在为我的iOS应用程序构建一个后端,我选择使用Flask框架。
对于数据库部分,我使用flask-sqlalchemy连接我的mysql数据库。
当我把所有的测试代码放在一个**文件中时,一切都运行良好。

测试.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

配置py

SQLALCHEMY_DATABASE_URI = "mysql://root:pwd@localhost/test"

应用程序.py

from app import app

if __name__ == '__main__':
    app.run(debug=True)

姓名首字母缩写

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()

型号.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”。指定“extend_existing=True”可重新定义现有Table对象的选项和列。

当我检查数据库时,我发现表player已创建。

看起来sqlalchemy试图重复创建表。
为什么会这样?

tyky79it

tyky79it1#

尝试

from app import models

代替

import models

正在创建循环导入。有关循环导入的详细信息,请参阅此link

相关问题