python - 尝试本地运行时出现 SqlAlchemy 问题
问题描述
我试图更好地学习如何使用 sqlalchemy 并部署到 heroku。除了一些其他问题,我决定首先在本地测试应用程序,然后担心部署它,但是在尝试运行它时出现了一些错误。
在运行之前,我确实在终端中设置了数据库变量和应用程序设置,但我仍然无法让它运行并从那里继续。
这是我从终端得到的错误
(venv) C:\Users\Stratos\Desktop\test-orm>python app.py
Traceback (most recent call last):
File "app.py", line 11, in <module>
from models import Result
File "C:\Users\Stratos\Desktop\test-orm\models.py", line 1, in <module>
from app import db
File "C:\Users\Stratos\Desktop\test-orm\app.py", line 11, in <module>
from models import Result
ImportError: cannot import name 'Result' from partially initialized module 'models' (most likely due to a circular import) (C:\Users\Stratos\Desktop\test-orm\models.py)
这是我尝试直接从 vscode 运行时遇到的错误
Traceback (most recent call last):
File "c:/Users/Stratos/Desktop/test-orm/app.py", line 7, in <module>
app.config.from_object(os.environ['APP_SETTINGS'])
File "c:\users\stratos\appdata\local\programs\python\python38-32\lib\os.py", line 675, in __getitem__
raise KeyError(key) from None
KeyError: 'APP_SETTINGS'
应用程序.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
from models import Result
@app.route('/')
def hello():
return "Hello World!"
@app.route('/<name>')
def hello_name(name):
return "Hello {}!".format(name)
if __name__ == '__main__':
app.run()
管理.py
import os
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app import app, db
app.config.from_object(os.environ['APP_SETTINGS'])
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
模型.py
from app import db
from sqlalchemy.dialects.postgresql import JSON
class Result(db.Model):
__tablename__ = 'results'
id = db.Column(db.Integer, primary_key=True)
url = db.Column(db.String())
result_all = db.Column(JSON)
result_no_stop_words = db.Column(JSON)
def __init__(self, url, result_all, result_no_stop_words):
self.url = url
self.result_all = result_all
self.result_no_stop_words = result_no_stop_words
def __repr__(self):
return '<id {}>'.format(self.id)
配置文件
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config(object):
DEBUG = False
TESTING = False
CSRF_ENABLED = True
SECRET_KEY = 'this-really-needs-to-be-changed'
SQLALCHEMY_DATABASE_URI = os.environ['DATABASE_URL']
class ProductionConfig(Config):
DEBUG = False
class StagingConfig(Config):
DEVELOPMENT = True
DEBUG = True
class DevelopmentConfig(Config):
DEVELOPMENT = True
DEBUG = True
class TestingConfig(Config):
TESTING = True
.env 文件
set APP_SETTINGS=config.DevelopmentConfig
set DATABASE_URL=postgresql://postgres:798361!@localhost:5432/dok
解决方案
推荐阅读
- laravel - 如何在 Laravel 应用程序中添加回复?
- python - 无和之间的区别
- python - Keras 深度学习模型在训练中总是给出相同的 acc
- ios - Xcode 无法为 ios 13.3.1 设备构建颤振代码,但在 13.3 ios 模拟器上运行代码
- c - malloc中的内存泄漏?
- acumatica - 有谁知道如何从 Acumatica 中的通用查询访问 MRP 详细查询结果?
- terraform - RDS 实例不在 localstack 中创建
- php - Twig 如何在 JSON 中进行插值
- swift - NSSplitViewController 不调用委托方法
- sql-server - 如何从破折号分隔的字符串中返回以完整单词结尾的前 N 个字符?