为 postgresql 表加载运行 heroku 时,关系“表名”不存在错误

问题描述

*After deploying my django model in heroku and migrations,

我无法通过批处理将数据加载到 postgres 表中
*

例如:

heroku run python Proddbupload.py  

我对以下错误感到失望

运行 python Proddbupload.py

on ⬢ spellbeeword... up,run.9508 (Free)
relation "spellbeeword_tb" does not exist 

使用 pg:psql 在 heroku 环境中的 Postgres 数据库中存在已验证的表名 Spellbeeword_tb 我将数据上传到上述表格的代码

import os
import psycopg2
def writedb(conn):
    cur = conn.cursor()
    try:
        with  open("spellbee/docs/Spell_Bee_Word_db.csv",'r') as f:
            cur.copy_from(f,'Spellbeeword_tb',sep=',')
            # commit changes
            conn.commit()
    
    except Exception as error:
        print(error)
    finally:
        if conn:
            conn.close()
            f.close()
def main():
    DATABASE_URL = os.environ['DATABASE_URL']
    try:
        conn = psycopg2.connect(DATABASE_URL,sslmode='require')
        writedb(conn)
    except(Exception,psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn:
            conn.close()
if __name__ == "__main__" :
    main()

在 pg:psql 查询中,它显示 我的表的数据库连接为 --> 连接到 postgresql-flat-40316
但是在heroku环境变量中,它显示
=== spellbeeword 配置变量

DATABASE_URL: postgres://mlsudzmqspljyc:c2e68f055e685aa45dde87@ec2-18-206-20-102.compute-1.amazonaws.com: 认情况下,上述配置已完成。

我不知道如何连接 postgresql-flat-40316/Spellbeeword_tb

当我检查下面的代码时,没有打印

cur.execute('SELECT version()')

显示Postgresql数据库服务器版本

db_version = cur.fetchone() 打印(db_version)

 Pls help me to import my data into table created by django model in heroku.  


我认为,在运行 heroku 时,它没有识别要连接的正确数据库
我遵循heroku postgresl django部署文档,其中
DATABASE_URL由dj-database-url安装配置
https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-python
我通过 heroku run python
运行了上面的 dbupload 代码 在单独运行之前,requirements 和 settings.py 被推送到 heroku # 设置数据库网址 数据库 = {'认':dj_database_url.config() }

查看我当前的 pg 状态
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           0/20
PG Version:            13.2
Created:               2021-04-06 10:54 UTC
Data Size:             9.0 MB
Tables:                13
Rows:                  68/10000 (In compliance)
Fork/Follow:           Unsupported
Rollback:              Unsupported
Continuous Protection: Off
Add-on:                postgresql-flat-40316

table row: ('d7uobuibp87kvk','public','BASE TABLE',None,'YES','NO',None)数据库内部,我的目标表存在但显示

relation "spellbeeword_tb" does not exist
LINE 1: SELECT * FROM Spellbeeword_tb;
                      ^

谁能建议如何在代码中指定表名来识别

解决方法

现在我确定它对表名中的大小写混合区分大小写。因此我在“双引号中给出了表名,然后它可以识别表

 `cur.execute('SELECT * FROM "Spellbeeword_tb";')`

并且没有为上面的sql语句抛出错误并获取表.... 但是由于下面的代码,关系不存在仍然存在

cur.copy_from(f,"Spellbeeword_tb",sep=',')

关系“spellbeeword_tb”不存在

,

最终确定 Postgres 数据库区分大小写。在 Camel Case 中定义的表,它无法识别表名关系(尽管表是用引号给出的(两个都是“/”) 因此我将表名修改为小写。现在它可以识别表格了。