Вот более короткий пример, который иллюстрирует отношение «один ко многим» между точками и прогнозами (я думаю, это то, что вы пытаетесь сделать):
from app import db
class Spot(db.Model):
id = db.Column(db.Integer, primary_key=True)
geobaseid = db.Column(db.Integer)
forecasts = db.relationship('Forecast', backref='spot', lazy='dynamic')
class Forecast(db.Model):
id = db.Column(db.Integer, primary_key=True)
region = db.Column(db.String(50))
spot_id = db.Column(db.Integer, db.ForeignKey('spot.id'))
Объект db
установленв инициализаторе пакета app
, следуя шаблону Мигеля Гринберга :
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 models
Обратите внимание, что после установки отношения с внешним ключом вам не нужно явное соединение для доступа кродительские поля из дочернего объекта - SQLAlchemy позволяет просто использовать точечную запись:
>>> from app import db
>>> from app.models import Spot, Forecast
>>> for spot in Spot.query.all():
... print(spot.id, spot.geobaseid)
...
1 1
2 2
>>> for forecast in Forecast.query.all():
... print(forecast.id, forecast.region, forecast.spot_id, forecast.spot.geobaseid)
...
1 Scotland 2 2
2 England 2 2