Я не могу создавать таблицы с использованием SQLAlchemy - PullRequest
0 голосов
/ 22 апреля 2020

Следуя этому учебнику по использованию SQLAlchemy и Postgresql, я основал себя для создания файловой структуры моделей, представлений, шаблонов и т. Д. c ..

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' Я думал, что я использую зарезервированное слово, даже меняю папку, имя страницы, ошибка сохраняется, просто меняю имя модуля.

Обновление:

Окончательный результат, этот пример работает для меня

run.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 и добавление класса Users, Purchase, всего, что я хочу ...

Я взял этот импорт и включил в начало моего 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

1 Ответ

1 голос
/ 22 апреля 2020

Единственная проблема, которую я могу найти, это то, что вы добавляете оператор импорта (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 для конфигурации двигателя.

Ссылка: Flask -SQLAlchemy импорт / проблема контекста


ОБНОВЛЕНИЕ

Итак, вы указали логин вашей компании (маршруты, ...) в файле init.py. Если вы хотите, чтобы он работал, я думаю, вы должны поместить его в файл run.py. Оставьте файлы __init__.py пустыми.

Кроме того, в ваш файл app.py импортируйте ваши модели следующим образом: from .website.models import Users. Для этого необходимо иметь три __init__.py файла. Один в вашем основном каталоге, где находится app.py, один в папке website и один в папке models.

* Надеюсь, это поможет. Пожалуйста, дайте мне знать, если это работает, и если есть что-то еще, с чем я могу вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...