使用 Python 连接到 Redshift 数据 - 错误:当前事务被中止,命令被忽略,直到事务块结束

Posted

技术标签:

【中文标题】使用 Python 连接到 Redshift 数据 - 错误:当前事务被中止,命令被忽略,直到事务块结束【英文标题】:Connecting to Redshift Data Using Python - Error: current transaction is aborted, commands ignored until end of transaction block 【发布时间】:2021-06-05 01:21:35 【问题描述】:

我正在尝试使用 Python (Jupyter Notebook) 连接 Redshift 数据。运行最后一行后,出现此错误:

InFailedSqlTransaction:当前事务被中止,命令 在事务块结束之前被忽略

你能帮帮我吗?

import psycopg2
con=psycopg2.connect(dbname= 'TBD', host='TBD', 
port= 'TBD', user= 'TBD', password= 'TBD')
cur = con.cursor()
cur.execute("SELECT site_id FROM dfa_std")

【问题讨论】:

SQL 结尾是否需要分号?表名周围可能有单引号? (不确定那个)。还要在末尾添加 cur.fetchall() 我试过带和不带分号,也试过带和不带单引号,都没有用! 你确定你的conn参数正确吗? 是的,当我运行第一行和第二行时,没有错误。导入 psycopg2 con=psycopg2.connect(dbname= 'TBD', host='TBD', port= 'TBD', user= 'TBD', 密码= 'TBD') 在该错误之前还有其他行吗?关于连接失败?你能看看你是否可以使用 psql 命令行工具连接(从同一个 ip),如果不能 - 什么错误? 【参考方案1】:

除了psycopg2,您还需要在笔记本服务器的 Python 中安装 sqlalchemyipython-sql

使用您的 Redshift 端点和凭据创建一个文件:

echo "
  \"user_name\": \"my_user\",
  \"password\": \"my_pswd\",
  \"host_name\": \"my_cluster_endpoint\",
  \"port_num\": \"5439\",
  \"db_name\": \"my_db\"
" > my.creds

然后在你的笔记本上试试这个:

import sqlalchemy
import psycopg2
import simplejson

%reload_ext sql
%config SqlMagic.displaylimit = 25

with open("my.creds") as fh:
    creds = simplejson.loads(fh.read())
connect_to_db = "postgresql+psycopg2://" + \
                creds["user_name"] +':'+ creds["password"] +'@'+ \
                creds["host_name"] +':'+ creds["port_num"] +'/'+ creds["db_name"];
%sql $connect_to_db
%sql SELECT current_user, version();

预期输出:

'Connected: my_user@my_db'

current_user | version
 my_user     | PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.24238

【讨论】:

我需要在“Jupyter Notebook”上创建那个文件吗? 是的,您可以在单元格中运行它。每个笔记本都在文件夹上下文中运行,并且可以读取/写入本地磁盘。

以上是关于使用 Python 连接到 Redshift 数据 - 错误:当前事务被中止,命令被忽略,直到事务块结束的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python连接到redshift jdbc url?

如何使用堡垒主机通过 SSH 连接到 Redshift

如何在 Python 中使用 JDBC 驱动程序和 Boto3 API 连接到现有的 Redshift 数据库

当尝试使用 psycopg2 模块通过 python 连接到 redshift 时,会显示以下错误

需要 SSL 时将 Python/pandas 连接到 Redshift

如何将 Cloud9 (python) 连接到 VPC 中的 Redshift?