#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 в приложении / модели.