Flask и SQLAlchemy, не импортируя данные из новой таблицы базы данных - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть работающее веб-приложение с базой данных flask и MySQL с SQLAlchemy.

В рамках дальнейшего развития я создал новую таблицу в базе данных, которая называется «багги». Предыдущие таблицы в базе данных, такие как публикация, были созданы до того, как сеть превратилась в пакет, и я все еще могу добавлять и удалять записи в этой таблице.

Однако новая таблица, называемая «багги», похоже, не отображает содержимое таблицы на домашней странице - home. html.

Журнал ошибок (отрывок):

Error running WSGI application
2020-04-17 08:29:28,946: jinja2.exceptions.TemplateSyntaxError: expected token 'end of print statement', got ':'
2020-04-17 08:29:28,946:   File "/usr/lib/python3.7/site-packages/flask/app.py", line 2309, in __call__
2020-04-17 08:29:28,946:     return self.wsgi_app(environ, start_response)

Мне также не удается подключиться к базе данных через SQLAlchemy, python3 в bash:

>>> from flask_app import db
>>> Post.query.all()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Post' is not defined
>>> from flask_app.models import db
>>> Post.query.all()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Post' is not defined

>>> from flask_app import db                                                                                                                                
>>> Buggies.query.all()                                                                                                                                     
Traceback (most recent call last):                                                                                                                          
  File "<stdin>", line 1, in <module>                                                                                                                       
NameError: name 'Buggies' is not defined                                                                                                                    
>>> from flask_app.models import db
>>> Buggies.query.all()                                                                                                                                     
Traceback (most recent call last):                                                                                                                          
  File "<stdin>", line 1, in <module>                                                                                                                       
NameError: name 'Buggies' is not defined                                                                                                                    
>>>  

MySQL:

mysql> show tables;
+----------------------+
| Tables_in_olbliss$CF |
+----------------------+
| buggies              |
| post                 |
| user                 |
+----------------------+
3 rows in set (0.01 sec)

mysql> describe buggies;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| BName        | varchar(100) | NO   |     | NULL    |                |
| BRider       | varchar(100) | YES  |     | NULL    |                |
| lastmodified | datetime     | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> select * from buggies;
+----+------------------+--------+---------------------+
| id | BName            | BRider | lastmodified        |
+----+------------------+--------+---------------------+
|  1 | Kawasaki         | Bob    | 2020-04-17 07:53:29 |
|  2 | Stewarding Buggy |        | 2020-04-17 07:55:50 |
|  3 | Parking Buggy    |        | 2020-04-17 07:56:10 |
+----+------------------+--------+---------------------+
3 rows in set (0.01 sec)

mysql> 

init .py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager

app = Flask(__name__)
app.config["DEBUG"] = True

app.config['SECRET_KEY'] = '...'

SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
    username="xxxxx",
    password="xxxxx",
    hostname="xxxxx",
    databasename="xxxxx",
)
app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db  = SQLAlchemy(app)
bcrypt = Bcrypt(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'
login_manager.login_message_category = 'info'

from flask_app import routes

rout.py

@app.route('/')
@app.route('/h')
@app.route('/home')
def home():
    posts = Post.query.all()
    buggies = Buggies.query.all()
    return render_template('home.html', posts=posts, buggies=buggies)

home. html (в макете нет ничего. html, что могло бы вызвать проблемы)

{% extends "layout.html" %}
{% block content %}
<p>{% for buggy in buggies %}
            {{ buggy:BName }}
        {% endfor %}</p>
{% endblock content %}

models.py

class Buggies(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    BName = db.Column(db.String(100), nullable=False)
    BRider = db.Column(db.String(100), nullable=True)
    lastmodified = db.Column(db.DateTime, nullable=True, default=datetime.utcnow)

    def __repr__(self):
        return f"Buggies('{self.BName}', '{self.BRider}','{self.lastmodified}')"

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    description = db.Column(db.Text, nullable=False)
    status = db.Column(db.String(100), nullable=False)
    assigned_to = db.Column(db.String(100), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"

forms.py

class BuggyForm(FlaskForm):
    BName = StringField('Name of Buggy', validators=[DataRequired()])
    BRider = StringField('Name of Rider')
    lastmodified  = DateTimeField('Date and Time', format='%Y-%m-%d %H:%M:%S')
    submit = SubmitField('Save')

1 Ответ

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

Для проверки списка используйте этот код

for buggy in buggies:
    print(buggy.BName)

Также попробуйте изменить html на это:

<p>{% for buggy in buggies %}
            {{ buggy['BName'] }}
        {% endfor %}</p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...