Как получить строку из SQLAlchemy с помощью flask

#python #python-3.x #flask #flask-sqlalchemy

#python #python-3.x #flask #flask-sqlalchemy

Вопрос:

Я изучаю, как использовать SQLAlchemy и базы данных в целом с помощью flask. Я следую руководству, и в нем используются следующие классы и файлы.

 https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database
 

Чтобы показать вставленную строку в базе данных, в руководстве используется следующее:

 from app.models import User
>>> u = User(username='susan', email='susan@example.com')
>>> u
<User susan>
 

Моя проблема в том, что я не могу отобразить тот же вывод. Я имею в виду, когда я кодирую оператор, я получаю сообщение об ошибке

из app.models импортируйте пользователя
ImportError: нет модуля с именем app.models

Пожалуйста, дайте мне знать, как адаптировать опубликованный код, чтобы я мог извлекать данные из базы данных

Структура папок:

 d:xxxxxxdb1appmodels
d:xxxxxxdb1__init__
d:xxxxxxdb1config
 

** инициализация **:

 from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

from app import routes, models
 

конфигурация:

 import os
basedir = os.path.abspath(os.path.dirname(__file__))

class Config(object):
# ...
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 
    'sqlite:///'   os.path.join(basedir, 'app.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
 

Модели:

 from app import db
from app.models import User

class User(db.Model):
    id = db.Column(db.Integer, primaty_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))

def __repr__(self):
    return '<User {}>'.format(self.username)    
 

Комментарии:

1. добавьте в вопрос свою структуру папок / файлов.

2. @waynetech Я не думал, что структура папок имеет значение.. Я сделаю это

3. @waynetech я добавил структуру папок

4. переходите __init__.py `d:xxxxxxdb1app ` папка

Ответ №1:

Вы не можете импортировать User в тот же модуль, где объявлены models, поэтому я не думаю, что вам нужна эта вторая строка в models.py , Попробуйте прокомментировать и посмотреть, что произойдет

 from app import db
from app.models import User ## I think the problems is 

class User(db.Model):
    id = db.Column(db.Integer, primaty_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))

def __repr__(self):
    return '<User {}>'.format(self.username)  
 

Комментарии:

1. Я считаю, что проблема OP заключалась в отсутствии init.py в приложении / модели.