首页 > 解决方案 > 我无法使用 SQLAlchemy 创建表

问题描述

按照这个使用 SQLAlchemy 和 Postgresql 的教程,我基于自己创建模型、视图、模板等的文件结构。

requirements.txt
run.py
website/
    __init__.py
    views/
    models/
          users.py
    static/
    templates/

如您所见,在模型内部我有 users.py

from app import db

class Users(db.Model):

    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    user = db.Column(db.String(), index=True, unique=True)
    password = db.Column(db.String(128))

    def __init__(self, user, password):
        self.user = user
        self.password= password


    def __repr__(self):
        return f"<User {self.user}>"

我的 init.py

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://postgres:postgres@localhost:5432/project"
db = SQLAlchemy(app)
migrate = Migrate(app, db)


#Routes
@app.route("/")
def index():
    return render_template('index.html')

现在,我使用这些命令来创建用户表flask db init, flask db migrate, flask db upgrade. 好的,在此之后,创建了一个名为 的表public.alembic_version,但如您所见,用户没有。

我最后一次尝试是在以下之间插入此导入from models import users

migrate = Migrate(app, db)

from models import users

    @app.route("/")
    def index():
        return render_template('index.html')

但是消息是ModuleNotFoundError: No module named 'models'我认为我使用了保留字,即使更改文件夹,页面名称,错误仍然存​​在,只需更改模块名称。

更新:

最终结果,这个例子对我有用

运行.py

from website import app
from website.models.users import User

app.run(host="0.0.0.0",debug=True,port=5000)

更新

requirements.txt
run.py
website/
    __init__.py
    views/
    models.py
    static/
    templates/

我改变的是删除模型文件夹 e 创建一个文件 models.py 并添加类用户,购买,我想要的任何东西......

我接受了这些进口并包括在我的models.py...

from website import app
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
import psycopg2
app.config['SQLALCHEMY_DATABASE_URI'] = "postgres://postgres:password@ipaddress:5432/databasename"
db = SQLAlchemy(app)
migrate = Migrate(app, db)

在行尾添加,在__init__.py蓝图导入后,如果我想这样做,from website.models import Users

from flask import Flask, render_template


app = Flask(__name__)

from website.models import Usuario

标签: pythonpostgresqlflasksqlalchemy

解决方案


我能找到的唯一问题是您from models import users在最后附加的代码部分中添加了一个导入语句 ()。但是,您还没有在文件夹中创建一个__init__.pymodels将其声明为模块。因此,您可以稍后将其作为模块导入,就像您__init__.py在主目录(“website/”)中创建了一个文件一样。models.py但是你如何在你的文件中导入run.py文件呢?在您的run.py文件中,您应该导入模型,例如from website.models.users import Users.

我有两个工作项目,我也使用FlaskSQLAlchemyPostgreSQL,但我设置为SQLALCHEMY_DATABASE_URI = 'postgres://postgres:[password]@localhost:5432/[database_name]'. 通过放置postgres而不是postgresql引擎配置,它工作得非常好。

参考:Flask-SQLAlchemy 导入/上下文问题


更新

好吧,您已将您的业务登录名(路线,...)放入init.py文件中。如果你想让它运行,我认为你应该把它放在run.py文件中。将__init__.py文件留空。

此外,在您的app.py文件中导入您的模型,如下所示from .website.models import Users:这要求您拥有三个__init__.py文件。一个在您所在的主目录中app.py,一个在website文件夹中,一个在models文件夹中。

*我希望这会有所帮助。请让我知道这是否有效,如果还有什么我可以帮助你的。


推荐阅读