添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Python到Netezza JDBC的连接在Mac上出现SQL .execution错误

0 人关注

我正在写一个Python脚本来检索Netezza表DB的计数。然而,我得到了以下错误。请让我知道如何解决这个问题。

  File "/Users/skulk00/PycharmProjects/NZ_RS_Validator/table_details_thread_pool.py", line 175, in <module>
    result = result_netezza_cursor.execute('SELECT COUNT(1) FROM STORE')
AttributeError: 'Connection' object has no attribute 'execute'

This is my connection code:

NETEZZA_JAR_LOC = os.path.join('/Users/skulk00/Connection Softwares/nzjdbc.jar')
NETEZZA_PP = ('username', 'password', 'xx.6.8.xx', 'dbname', 'netezza', 'org.netezza.Driver', '5480')
class Connector:
    """Create Database connection."""
    def __init__(self, db_name):
        self.db_name = db_name
        self.all_db = {
            'netezza_pp': NETEZZA_PP,
            'netezza_prod': NETEZZA_PROD,
        if self.db_name not in self.all_db:
            raise ValueError(f'Available database choices are {tuple(self.all_db.keys())}')
    def _get_cxn_string(self, user, password, host, dbname, dialect, driver, port):
        if 'netezza' in self.db_name:
            db_string = f'jdbc:{dialect}://{host}:{port}/{dbname}'
        return db_string
    def cursor(self):
        db_name = self.db_name
        db_creds = self.all_db[db_name]
        db_string = self._get_cxn_string(*db_creds)
        print(db_name)
        print(db_creds)
        print(db_string)
        if 'netezza' in db_name:
            cxn = jaydebeapi.connect('org.netezza.Driver', db_string, {'user': db_creds[0], 'password': db_creds[1]}, jars=NETEZZA_JAR_LOC)
        return cxn

这是我的主要功能代码。

result_netezza_connector = Connector('netezza_pp')
result_netezza_cursor = result_netezza_connector.cursor()
result = result_netezza_cursor.execute('SELECT COUNT(1) FROM STORE')
print(result)
    
python
database
macos
jdbc
netezza
Shreyas Kulkarni
Shreyas Kulkarni
发布于 2020-12-21
1 个回答
Aniket Kulkarni
Aniket Kulkarni
发布于 2020-12-21
已采纳
0 人赞同

I would recommend using Python本地nzpy 用于Python脚本与Netezza互动的驱动程序

import nzpy
conn = nzpy.connect(user="...", password="...", host='...', 
                port=5480, database="...")
with conn.cursor() as cursor:
    cursor.execute(...)

关于更详细的例子,你可以参考这些样品

回到JDBC问题--问题是你从Connector.cursor()方法中返回一个jayedebeapi.Connection,而不是一个游标。

result_netezza_connector = Connector('netezza_pp')
with result_netezza_connector.cursor().cursor() as result_netezza_cursor:
    result_netezza_cursor.execute('SELECT COUNT(1) FROM STORE')
    print(result_netezza_cursor.fetchall())
# a better option to display is using pandas
import pandas
df = pandas.read_sql('SELECT COUNT(1) from STORE',
      result_netezza_connect)
# will print tabular and you can use the dataframe for further
# processing

替换代码4】令人困惑,我建议将Connection.cursor()方法改名为Connection.connection()。这将使它更具有可读性 -