【问题标题】:Heroku flask UndefinedTable relation doesn't existHeroku烧瓶UndefinedTable关系不存在
【发布时间】:2020-08-08 15:29:08
【问题描述】:

应用程序在本地运行良好,但我在 Heroku 上部署应用程序时遇到问题,出现内部服务器错误。当我运行 heroku logs --tail 我得到这个:

2020-04-24T22:39:36.957365+00:00 app[web.1]: sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation "farm" does not exist
    2020-04-24T22:39:36.957366+00:00 app[web.1]: LINE 2: FROM farm ORDER BY farm.name
    2020-04-24T22:39:36.957366+00:00 app[web.1]: ^
    2020-04-24T22:39:36.957366+00:00 app[web.1]:
    2020-04-24T22:39:36.957367+00:00 app[web.1]: [SQL: SELECT farm.id AS farm_id, farm.name AS farm_name, farm.address AS farm_address, farm.city AS farm_city
    2020-04-24T22:39:36.957367+00:00 app[web.1]: FROM farm ORDER BY farm.name]
    2020-04-24T22:39:36.957367+00:00 app[web.1]: (Background on this error at: http://sqlalche.me/e/f405)
    2020-04-24T22:39:36.957668+00:00 app[web.1]: 10.95.177.213 - - [24/Apr/2020:22:39:36 +0000] "GET /farms HTTP/1.1" 500 0 "-" "
-"

另外,我得到了这个状态,不确定它是否有帮助。

$ heroku pg:info
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           2/20
PG Version:            12.2
Created:               2020-04-24 22:23 UTC
Data Size:             7.9 MB
Tables:                0
Rows:                  0/10000 (In compliance)
Fork/Follow:           Unsupported
Rollback:              Unsupported
Continuous Protection: Off
Add-on:                postgresql-encircled-56224

并进行 heroku 诊断:

$ heroku pg:diagnose
Report 7834cb14-1b08-4532-b611-4b457e00410e for fsdn-farm-shop::DATABASE_URL
available for one month after creation on 2020-04-25T10:06:21.528717+00:00

RED: Idle in Transaction
Pid    Duration         Query
─────  ───────────────  ────────────────────────────────────────────────────────────────────────────────────────────────────────
18615  00:20:55.869121  SELECT farm.id AS farm_id, farm.name AS farm_name, farm.address AS farm_address, farm.city AS farm_city
                        FROM farm ORDER BY farm.name
GREEN: Connection Count
GREEN: Long Queries
GREEN: Long Transactions
GREEN: Indexes
GREEN: Bloat
GREEN: Hit Rate
GREEN: Blocking Queries
GREEN: Table Transaction ID Wraparound
GREEN: Schema Count
SKIPPED: Sequences
Error could not do check
SKIPPED: Database Transaction ID Wraparound
Error Database wraparound check not supported on this plan
SKIPPED: Load
Error Load check not supported on this plan

模型是这样设置的:

class Farm(db.Model):
    __tablename__ = 'farm'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120))
    address = db.Column(db.String(120))
    city = db.Column(db.String(32))

    product = db.relationship('Product', backref='farm', lazy=True)


class Product(db.Model):
    __tablename__ = 'product'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120))
    quantity = db.Column(db.Integer)

    farm_id = db.Column(db.Integer, db.ForeignKey('farm.id'))

看起来迁移已运行,但我在想可能是数据库 url 有问题,或者可能存在循环导入。我是新来的,似乎无法弄清楚。

还包括我的 github: https://github.com/victorcocuz/fsdn-farm-shop

【问题讨论】:

    标签: postgresql flask heroku flask-sqlalchemy heroku-postgres


    【解决方案1】:

    错误消息relation "farm" does not exist 由 postgresql 引发,而不是 sqlalchemy 或 psycopg2(数据库驱动程序 sqlalchemy 使用)。错误告诉我们数据库正在获取的查询是:

    SELECT 
       farm.id AS farm_id,
       farm.name AS farm_name, 
       farm.address AS farm_address, 
       farm.city AS farm_city
    FROM 
       farm 
    ORDER BY 
       farm.name;
    

    但它无法识别其搜索架构中的表名farm

    请注意此问题中的相同错误:Postgresql tables exists, but getting "relation does not exist" when querying

    如果您的架构不是公共架构,我会尝试在您的 ORM 中指定架构,方法是在 __tablename__ = 'farm' 下添加:__table_args__ = {"schema":"schema_name"}

    或者你可以试试__tablename__ = '{schema_name}.farm'

    【讨论】:

    • 我正在使用 SQLAlchemy ORM,我相信它会在后台处理这个问题。
    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 2016-03-18
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2020-05-08
    相关资源
    最近更新 更多