mysql - 通过两个表连接查询 Flask-SQLAlchemy - 连接不起作用

标签 mysql flask-sqlalchemy

我正在尝试连接两个表。

这是我的简化表格

class Spots(db.Model):
    __tablename__ = "spots"

    geobaseid = db.Column((db.Integer), primary_key=True,autoincrement=True)
    spot = db.Column(db.String(50))
    url_slug = db.Column(db.String(50))
    region = db.Column(db.String(50))
    country = db.Column(db.String(50))
    chop = db.Column(db.Integer)
    small_wave = db.Column(db.Integer)
    flat = db.Column(db.Integer)
    big_wave = db.Column(db.Integer)
    west_direction = db.Column(db.Integer)
    southwest_direction = db.Column(db.Integer)
    amount = db.Column(db.Integer)
    url_slug = db.Column(db.String(50))

    forcast = db.relationship('Forcast_short')

class Forcast_short(db.Model):
    __tablename__ = "forcast_short"

    id = db.Column((db.Integer), primary_key=True,autoincrement=True)
    date = db.Column(db.Date)
    geobaseid = db.Column((db.Integer), ForeignKey('spots.geobaseid'))
    spot = db.Column(db.String(50))
    region = db.Column(db.String(50))
    country = db.Column(db.String(50))
    latitude = db.Column(db.Numeric(10,8))
    longitude = db.Column(db.Numeric(10,8))
    deg = db.Column(db.Numeric(65,1))
    mps = db.Column(db.Numeric(65,1))

这是我的查询不起作用

forcast_query = Forcast_short.query.join(Spots, Spots.geobaseid==Forcast_short.geobaseid).filter(Forcast_short.region == region).all()

我做错了什么?

当我运行查询时,我只能从带有和不带有过滤器的 Forcast_short 获得结果。

<tbody>
                  <tr>{%for row in forcast_query%}
                    <td><a href="/spots/{{row.url_slug}}"> {{row.spot}} </a></td>
                    <td>{{row.mps}} </td>
                    <td>{{row.url_slug}} </td>

                  </tr>
                  {%endfor%}
                </tbody>

此查询在 Mysql 工作台中有效。

select * from
(
SELECT * FROM sc_db2.forcast_short

) a
 join 
(
select * from sc_db2.spots
) b
on a.geobaseid = b.geobaseid

;

最佳答案

你制作模型的方式相当困惑。与 sqlalchemy 的文档保持一致我建议您阅读关系模式,其中介绍了如何建立一对多关系:

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))

此关系在引用父表的子表上放置一个外键。然后在父级上指定relationship(),作为引用由子级表示的项目集合。

关于您的查询:

协调模型后,您的请求应如下所示:

forcast_query = Forcast_short.query.join(Spots, Spots.geobaseid==Forcast_short.geobaseid).filter(Forcast_short.region == region).filter(Forcast_short.date == date_1).all()

关于mysql - 通过两个表连接查询 Flask-SQLAlchemy - 连接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58216665/

相关文章:

python - Flask reSTLess 无法构造查询

python - 如何通过月份名称查询sqlalchemy

php - 每周从 sql 中获取新结果

php - WPDB 不工作,SQL 查询在 phpmyadmin 中工作

mysql - 加快mysql查询速度

mysql - OperationalError 在 'reading initial communication packet' DigitalOcean 失去与 MySQL 服务器的连接

python - 将 SQLAlchemy 事件监听器放置在多对多表上

mysql - SQL 一对多关系,但是多对一表关系

用于运行存储过程的 MySQL 唯一 session

sqlalchemy - 如何连接到嵌入 SQLAlchemy 的 Firebird