#python #postgresql #flask #sqlalchemy
#python #postgresql #flask #sqlalchemy
Вопрос:
Я пытаюсь немного лучше изучить, как использовать sqlalchemy и развернуть в heroku. помимо некоторых других проблем, с которыми я столкнулся, я решил сначала протестировать приложение локально, а затем побеспокоиться о его развертывании, но при попытке запустить его я получаю несколько ошибок.
перед запуском я устанавливаю переменные базы данных и настройки приложения в терминале, но все равно не могу запустить его и продолжить оттуда.
это ошибка, которую я получаю от терминала
(venv) C:UsersStratosDesktoptest-orm>python app.py
Traceback (most recent call last):
File "app.py", line 11, in <module>
from models import Result
File "C:UsersStratosDesktoptest-ormmodels.py", line 1, in <module>
from app import db
File "C:UsersStratosDesktoptest-ormapp.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:UsersStratosDesktoptest-ormmodels.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:usersstratosappdatalocalprogramspythonpython38-32libos.py", line 675, in __getitem__
raise KeyError(key) from None
KeyError: 'APP_SETTINGS'
app.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()
manage.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()
models.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)
config.py
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
Комментарии:
1. У вас есть циклический импорт — приложение импортирует из моделей, а модели импортируются из приложения.
2. ну, я понимаю. я прокомментировал это, но теперь я получаю больше проблем. дело в том, что я следовал руководству от realpython, и конечной целью является развертывание в heroku, но по какой-то причине я не мог следовать руководству по word, поэтому я импровизировал и искал некоторые проблемы, которые у меня были. например, в руководстве говорилось установить URL базы данных как DATABASE_URL=»postgresql:///dok», но без паролей и пользователей я не мог перенести его, поэтому я изменил его так, как показано выше. затем у меня возникли проблемы с heroku, поэтому я сделал это по-другому. в конце концов я решил запустить его локально и завершить приложение, а затем беспокоиться о heroku
3. У меня есть шаблон для приложений в моем репозитории, проверьте его для справки. github.com/rajverma1985/app_template . Также проверьте мой другой репозиторий github.com/rajverma1985/anticovidrobo что даст вам представление о миграции БД. Не стесняйтесь общаться, если вы столкнетесь с какими-либо другими проблемами или не сможете понять содержимое репозитория (без обид).
4. спасибо, что я читаю это сейчас. хотя я вижу, что в нем нет текста требований. Я попробую это в любом случае, еще раз спасибо