python - 我无法使用 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
解决方案
我能找到的唯一问题是您from models import users
在最后附加的代码部分中添加了一个导入语句 ()。但是,您还没有在文件夹中创建一个__init__.py
来models
将其声明为模块。因此,您可以稍后将其作为模块导入,就像您__init__.py
在主目录(“website/”)中创建了一个文件一样。models.py
但是你如何在你的文件中导入run.py
文件呢?在您的run.py
文件中,您应该导入模型,例如from website.models.users import Users
.
我有两个工作项目,我也使用FlaskSQLAlchemy和PostgreSQL,但我设置为SQLALCHEMY_DATABASE_URI = 'postgres://postgres:[password]@localhost:5432/[database_name]'
. 通过放置postgres
而不是postgresql
引擎配置,它工作得非常好。
更新
好吧,您已将您的业务登录名(路线,...)放入init.py
文件中。如果你想让它运行,我认为你应该把它放在run.py
文件中。将__init__.py
文件留空。
此外,在您的app.py
文件中导入您的模型,如下所示from .website.models import Users
:这要求您拥有三个__init__.py
文件。一个在您所在的主目录中app.py
,一个在website
文件夹中,一个在models
文件夹中。
*我希望这会有所帮助。请让我知道这是否有效,如果还有什么我可以帮助你的。
推荐阅读
- reactjs - 资产在开发中提供服务,但不是生产并获得“Uncaught SyntaxError: Unexpected token '<'”
- android - 使用 Android Studio 和 MQTT 代理发送文本
- javascript - 在异步函数中捕获错误时,如何在 for 循环中控制台记录 i 的值?
- actions-on-google - 商家管理的支付交易不再在瑞士运作
- python-3.x - 在 Python 3 中,是否可以在没有 for .. in 表达式的任何调用中使用短路评估?
- sql - 修改案例陈述
- excel - 当一个新元素添加到数组中的非空位置时,我试图将数组中的每个元素向下移动一个位置
- css - 具有 2 列的 CSS 网格以动态适应每行两个项目
- xaml - 在 Collectionview 上设置选择背景颜色并保持材质波纹
- pentaho - 如何使用 ETL Pentaho 检索表的所有数据并将其复制到另一个表中