【发布时间】:2021-03-10 22:14:36
【问题描述】:
我尝试在 PyCharm 中使用 Python Flask 和 SQLAlchemy 编写 Web 应用程序。我将我的项目链接到 Heroku 中的 PostgreSQL 数据库,现在正在尝试创建我编码的表。我的主站点 argos.py 如下所示:
from flask import Flask, render_template, redirect, url_for, flash
from flask_login import LoginManager, login_user, current_user, logout_user
from models import *
from forms import *
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.secret_key = 'replace later'
app.config['SQLALCHEMY_DATABASE_URI']='postgres://[my heroku link]'
db = SQLAlchemy(app)
@app.route('/')
def hello_world():
return render_template('start.html')
[...]
我的 models.py 看起来像这样:
from flask_login import UserMixin
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.postgresql import JSON
db = SQLAlchemy()
own = db.Table('own',
db.Column('user_id', db.Integer, db.ForeignKey('user.user_id')),
db.Column('text_id', db.Integer, db.ForeignKey('text.text_id'))
)
class User(UserMixin, db.Model):
__tablename__ = "user"
user_id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True, nullable=False)
email = db.Column(db.String(50), unique=True, nullable=False)
password = db.Column(db.String(50), nullable=False)
owning = db.relationship('Text', secondary=own, backref=db.backref('owners', lazy='dynamic'))
class Text(db.Model):
__tablename__ = "text"
text_id = db.Column(db.Integer, primary_key=True)
text_data = db.Column(JSON, nullable=False)
我尝试通过运行在 PyCharm 的 python shell 中创建表:
from argos import db
db.create_all()
导入似乎工作得很好,但是当我输入创建命令时,什么都没有发生,甚至没有错误消息。我从我的 Windows CMD 终端尝试了同样的事情,并且只创建了一个表(只有两列的文本表),但仍然没有任何反应。我确定我犯了一个初学者的错误,对此我很抱歉,但我已经好几个小时没能解决这个问题了,这完全让我发疯了。
非常感谢您。
【问题讨论】:
-
你在 db.create_all() 之后错过了 db.session.commit()
-
感谢您的建议,但遗憾的是没有奏效。
-
你在建表之前定义模型了吗?
-
不确定我是否明白了这一点,但当然我在models.py中定义了模型并将它们导入到主页argos.py中,然后再尝试在python控制台中创建它们。
-
我想知道
models.py中的db = SQLAlchemy()是不是罪魁祸首?它实际上与app无关。尝试将 importdb从argos.py移动到models.py并使用它而不是db = SQLAlchemy()。
标签: python postgresql flask heroku sqlalchemy