Форум сайта python.su
всем привет.
недавно начал изучение программирования, использую python + flask + sqlalchemy + mysql.
читаю такие источники:
Мега-Учебник Flask - https://habrahabr.ru/post/193242/
How to build CRUD app with Python, Flask, SQLAlchemy and MySQL - https://techarena51.com/index.php/flask-sqlalchemy-tutorial/
но все равно есть вопросы принципиального характера.
на основе источников и поиска в интернете собрал небольшой проект:
итак.
есть config.py
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_DATABASE_URI = 'mysql://root:12345@localhost/mydb'
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
app.secret_key = 'some_secret'
db = SQLAlchemy(app)
from app import views, models
from app import db class Status(db.Model): #__tablename__ = 'Status' id = db.Column(db.Integer, primary_key = True) status = db.Column(db.String(64), index = True, unique = True) logs = db.relationship('Log', backref = 'state', lazy = 'dynamic') def __init__(self, status): self.status = status def get_id(self): return str(self.id) def getStatus(self): return STATUS.STATUS[self.status] def __repr__(self): return '<Status %r>' % (self.status) class Log(db.Model): #__tablename__ = 'Log' id = db.Column(db.Integer, primary_key=True) timestamp = db.Column(db.DateTime) log_data = db.Column(db.Float) status_id = db.Column(db.Integer, db.ForeignKey('status.id')) def __init__(self, timestamp, curl_et, status_id): self.timestamp = timestamp self.log_data = log_data self.status_id = status_id def __repr__(self): return '<Log %r>' % (self.log_data)
from flask import render_template, request,flash, redirect, url_for
from app import app, db
from app.models import Status, Log
@app.route('/')
@app.route('/index')
def index():
#return "Hello, World!"
stat = Status.query.all()
#stat = models.Status.query.all()
return render_template('index.html', stat=stat)
<html>
<head>
<title>minimon</title>
</head>
<body>
<h1>stat.id - {{stat}}</h1>
</body>
</html>
stat.id - [<Status u'status1'>, <Status u'status2'>, <Status u'status3'>]
(venv) [user@host]$ python Python 2.7.11 (default, Jun 15 2016, 07:56:38) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from app import db, models >>> s = models.Status.query.all() >>> print s [<Status u'status1'>, <Status u'status2'>, <Status u'status3'>] >>> пробую вызвать get_id метод: >>> print s.get_id Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list' object has no attribute 'get_id' >>> print s.get_id() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list' object has no attribute 'get_id' >>> print s.id Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list' object has no attribute 'id' >>> >>> print s.status Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list' object has no attribute 'status'
Отредактировано d00m (Июль 19, 2016 16:43:19)
Офлайн
Это лист информации поэтому не робит . Надо как-то преобразовать лист в переменные
Офлайн
d00m
У вас есть переменная stat в которой находится список элементов. Логично предположить что со списком нужно и работать со как со списком т.е. итерируемым объектом. Вам надо в шаблоне организовать цикл и поэлементно выводить данные для таблицы. Это описывается в любых материалах по шаблонизаторам, в том же материале что вы используете
Офлайн
1) secret_key можно из __init__ перенести в конфиг обозначатеся так:
SECRET_KEY
2) С чем вы работаете:
stat = Status.query.all()
В данная переменная - это список элементов типа Status, соответственно с пеменной и работаете, как с списком.
Например вам нужна строка с списком всех id элементов через “;”
Пишите следующее
';'.join(x.id for x in stat)
';'.join(x.status for x in stat)
stat[0].id
Офлайн