将熊猫数据框上传到红移 - 关系“sqlite_master”不存在

Posted

技术标签:

【中文标题】将熊猫数据框上传到红移 - 关系“sqlite_master”不存在【英文标题】:upload pandas dataframe to redshift - relation "sqlite_master" does not exist 【发布时间】:2019-11-22 11:14:19 【问题描述】:

我正在尝试编写一个从 pandas 到 redshift 的数据框。

这里是代码

df = pd.DataFrame('num_legs': [2, 4, 8, 0],
                   'num_wings': [2, 0, 0, 0],
                   'num_specimen_seen': [10, 2, 1, 8],
                  index=['falcon', 'dog', 'spider', 'fish'])

from sqlalchemy import create_engine
import sqlalchemy
sql_engine = create_engine('postgresql://username:password@host:port/dbname')
conn = sql_engine.raw_connection()

df.to_sql('tmp_table', conn, index = False, if_exists = 'replace')

但是,我收到以下错误

    ---------------------------------------------------------------------------
    UndefinedTable                            Traceback (most recent call last)
    ~/opt/anaconda3/envs/UserExperience/lib/python3.7/site-packages/pandas/io/sql.py in execute(self, *args, **kwargs)
       1594             else:
    -> 1595                 cur.execute(*args)
       1596             return cur

    UndefinedTable: relation "sqlite_master" does not exist
...
...
...

   1593                 cur.execute(*args, **kwargs)
   1594             else:
-> 1595                 cur.execute(*args)
   1596             return cur
   1597         except Exception as exc:

DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': relation "sqlite_master" does not exist

我尝试使用用户 pandas_redshift 但是,似乎第一个必须上传到 s3 存储桶,然后再上传到红移。我想直接上传。同样Here我看到答案建议先上传到s3再上传到redshift

我可以使用相同的连接读取和查询数据库。

【问题讨论】:

【参考方案1】:

尝试使用 sql_engine 代替 conn。

我刚刚遇到了同样的问题,使用 engine 可以解决问题,请尝试以下操作:

import sqlalchemy

engine = sqlalchemy.create_engine('postgres://username:password@url:5439/db_name')
print(bool(engine)) # <- just to keep track of the process

with engine.connect() as conn:
    print(bool(conn)) # <- just to keep track of the process

    df.to_sql(name=table_name, con=engine)
    print("end") # <- just to keep track of the process

【讨论】:

以上是关于将熊猫数据框上传到红移 - 关系“sqlite_master”不存在的主要内容,如果未能解决你的问题,请参考以下文章

Spark没有将所有数据保存到红移

定期将数据从 S3 存储桶流式传输到红移

从本地数据源到红移的连续数据摄取

有没有办法通过数据管道以预定义的顺序将文件从 S3 复制到红移

我们可以使用复制命令使用访问密钥和秘密密钥将数据从 S3 加载到红移表中吗(不使用 IAM 角色)

将 Hive 表迁移到红移