Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过SQLAlchemy使用适当的文件结构以及如何向数据库添加数据_Python_Heroku_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 通过SQLAlchemy使用适当的文件结构以及如何向数据库添加数据

Python 通过SQLAlchemy使用适当的文件结构以及如何向数据库添加数据,python,heroku,flask,sqlalchemy,flask-sqlalchemy,Python,Heroku,Flask,Sqlalchemy,Flask Sqlalchemy,我正在尝试构建一个简单的博客平台来学习Python和Flask。我正在使用SQLAlchemy连接到托管在Heroku和flask_s3上的Postgres db,以提供来自AWS bucket的静态文件。我主要是从以下几点: 一切都进展顺利,它被正确地托管在Heroku上,并连接到AWS S3 bucket,准备就绪。然而,如何通过某种形式或途径将博客文章添加到数据库中,使我能够填写博客文章的属性(在下面models.py中的post中找到),这让我陷入了困境 我有可以渲染的html模板和以

我正在尝试构建一个简单的博客平台来学习Python和Flask。我正在使用SQLAlchemy连接到托管在Heroku和flask_s3上的Postgres db,以提供来自AWS bucket的静态文件。我主要是从以下几点:

一切都进展顺利,它被正确地托管在Heroku上,并连接到AWS S3 bucket,准备就绪。然而,如何通过某种形式或途径将博客文章添加到数据库中,使我能够填写博客文章的属性(在下面models.py中的post中找到),这让我陷入了困境

我有可以渲染的html模板和以下三个文件:app.py、manage.py和models.py

app.py:

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_s3 import FlaskS3

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = '*URI for DB hosted on heroku'
app.config['FLASKS3_BUCKET_NAME'] = 'my S3 bucket on AWS'

db = SQLAlchemy(app)
s3 = FlaskS3(app)

from models import Post

#routes to templates to be rendered

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

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand

from app import app, db

migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()
和models.py:

from manage import db,app

class Post(db.Model):
    __tablename__ = 'blogposts'

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(120), index=True, unique=True)
    content = db.Column(db.Text, index=True, unique=True)
    date = db.Column(db.DateTime, index=True, unique=True)
    tag = db.Column(db.String(120), index=True, unique=True)
    cover = db.Column(db.String(120), index=True, unique=True)

    def __repr__(self):
        return '<Post: %r>' % (self.title)
我想在本地完成这项工作(在我向Heroku发布任何内容之前),但不知道从这里做什么。在我向Heroku推送最终定稿的博客帖子之前,有人对如何创建一条路径来添加博客帖子并将其保存到本地Postgres实例有什么建议吗

我一直遵循的要点是这样的:

@app.route('/add/')
def webhook():
    #post attributes defined
    p = Post(id = id, title = title, date = datetime.datetime.utcnow, content = content, tag = tag, cover = cover)
    print("post created", p)
    db.session.add(p)
    db.session.commit()
    return "post created"
当我尝试在本地运行它时,会出现以下错误,因此我不确定文件是否正确连接

File "/Users/Mb/Desktop/datadude/app.py", line 15, in <module>
from models import Post
ImportError: cannot import name 'Post'
文件“/Users/Mb/Desktop/datadude/app.py”,第15行,在
从模型导入后
ImportError:无法导入名称“Post”

对不起,这里放错地方了。如果有更好的地方征求意见,请告诉我。

问题存在于循环依赖中

您可以将SQLAlchemy的初始化移到models.py。然后只在app.py中的db对象上运行init_app方法

models.py
您可以阅读更多关于它的信息

关于在何处放置
创建表的任何建议
?我假设它必须在
init_app
之后,因为它包含数据库uri。我想你会把它放到app.py中吧?
File "/Users/Mb/Desktop/datadude/app.py", line 15, in <module>
from models import Post
ImportError: cannot import name 'Post'
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Post(db.Model):
    __tablename__ = 'blogposts'

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(120), index=True, unique=True)
    content = db.Column(db.Text, index=True, unique=True)
    date = db.Column(db.DateTime, index=True, unique=True)
    tag = db.Column(db.String(120), index=True, unique=True)
    cover = db.Column(db.String(120), index=True, unique=True)

    def __repr__(self):
         return '<Post: %r>' % (self.title)
import datetime
from flask import Flask, render_template

from flask_s3 import FlaskS3
from models import db


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = '*URI for DB hosted on heroku'
app.config['FLASKS3_BUCKET_NAME'] = 'my S3 bucket on AWS'
db.init_app(app)

s3 = FlaskS3(app)
from models import Post


@app.route('/add/')
def webhook():
    #post attributes defined
    p = Post(id = id, title = title, date = datetime.datetime.utcnow, content = content, tag = tag, cover = cover)
    print("post created", p)
    db.session.add(p)
    db.session.commit()
    return "post created"
#routes to templates to be rendered

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